Frage

Ich habe Combobox modifiziert, um Farben unter Verwendung von Qtcolorcombo zu halten (http://qt.nokia.com/products/appdev/add-onproducts/catalog/4/widgets/qtcolorcombobox) als Howto für die Details der Schaltfläche "More ...". Es funktioniert gut in C ++ und in PYQT unter Linux, aber ich erhalte 'zugrunde liegende C ++ - wurde zerstört', wenn diese Steuerung in PYQT unter Windows verwendet wurde. Es seels wie der Fehler auftritt, wenn:

...
# 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)
...

Vielleicht hilft die Konsolenausgabe. Ich habe Event () in Editor überschrieben und habe:

  • MausbuttonRelease
  • Fokusout
  • Verlassen
  • Farbe
  • Eintreten
  • Verlassen
  • Fokusin
  • !!!!!!!!! Qtgui.qcolordialog.getColor ()
  • Fensterblöcke
  • Farbe
  • Fensterdeaktivierung
  • !!!!!!!!! "Naher" Feuer!
  • Ausblenden
  • Hidetoparent
  • Fokusout
  • Aufgeschobene Delete
  • !!!!!!!!! #6e6eff

Kann jemand erklären, warum es in den verschiedenen Umgebungen ein so anderes Verhalten gibt, und vielleicht eine Problemumgehung geben, um dies zu beheben. Hier ist das minimale Beispiel:http://docs.google.com/doc?docid=0AA0OTNVDBWRRZDDXYNF3NV80Y20YAM1NZHM&HL=EN

War es hilfreich?

Lösung

Das Problem scheint eine Tatsache zu sein, dass qcolordialog.color () einen modalen Dialog zeigt, der sich aus der Kombination konzentriert, die unmittelbar danach schließt, und dann zerstört es Delegierter. Die Problemumgehung zur Lösung solcher Probleme ist also die Ereignisunterbrechung:

Im Delegierten:

def eventFilter(self, editor, event):
    if event.type() == QtCore.QEvent.FocusOut and hasattr(editor, 'canFocusOut'):
        if not editor.canFocusOut: return False
    return QtGui.QItemDelegate.eventFilter(self, editor, event)

Im Herausgeber müssen wir das Flag -Self einführen. Canfocusout und setzen es auf wahr, wenn Focusout verboten ist. Ich mache das, wenn 'erhebliches' Signal auf das Element abfeuert, das Qcolordialog zeigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top