J'ai modifié la zone de liste déroulante pour conserver les couleurs, en utilisant QtColorCombo (http://qt.nokia.com/products/appdev/add-on-products/catalog/4/Widgets/qtcolorcombobox) comme méthode pour les détails d'implémentation du bouton 'more ...'. Cela fonctionne très bien en C++ et en PyQt sous Linux, mais je vois que l'objet C++ sous-jacent a été détruit lors de l'utilisation de ce contrôle dans PyQt sous Windows. Il se produit comme si l'erreur se produisait lorsque:'Objet C++ détruit' dans l'éditeur descendant de QComboBox dans le délégué
...
# in constructor:
self.activated.connect(self._emitActivatedColor)
...
def _emitActivatedColor(self, index):
if self._colorDialogEnabled and index == self.colorCount():
print '!!!!!!!!! QtGui.QColorDialog.getColor()'
c = QtGui.QColorDialog.getColor() # <----- :(delegate fires 'closeEditor'
print '!!!!!!!!! ' + c.name()
if c.isValid():
self._numUserColors += 1
#at the next line currentColor() tries to access C++ layer and fails
self.addColor(c, self.currentColor().name())
self.setCurrentIndex(index)
...
La sortie de la console peut être utile. J'ai événement() redéfinie dans l'éditeur et a obtenu:
- MouseButtonRelease
- FocusOut
- Laissez
- Peinture
- Entrez
- Laissez
- FocusIn
- !!!! !!!!! QtGui.QColorDialog.getColor()
- WindowBlocked
- Peinture
- WindowDeactivate
- !!!!!!!!! 'CloseEditor' tire!
- Cacher
- HideToParent
- focusOut
- DeferredDelete
- !!!!!!!!! # 6e6eff
Quelqu'un peut-il expliquer pourquoi il y a un tel comportement différent dans les différents environnements, et peut-être donner une solution pour résoudre ce problème. Voici l'exemple minimal: http://docs.google.com/Doc?docid=0Aa0otNVdbWrrZDdxYnF3NV80Y20yam1nZHM&hl=en