Frage

Ich habe einen Nachkommen von QTreeView mit mehreren Spalten geschrieben. Ich möchte ein Popup-Menü erstellen, die WHE ndie Benutzer mit der rechten Klicks über die Spaltenüberschriften angezeigt. Ich habe versucht, Signale von QTreeView für diese zu kontrollieren, aber QTreeView scheint nicht zu emit Signale auf den Header. QTreeView.header () der Fall ist. Deshalb glaube ich, muss ich entweder:
1: Verbinden Sie das eine von QHeaderView die Signale zu einem Popup-Funktion - ich habe es nicht gelungen, ein Signal zu finden, die auf einem einzigen rechten Maustaste ausgelöst wird - ich habe versucht sectionClicked, sectionHandleDoubleClicked, sectionDoubleClicked, sectionPressed (überrascht nicht die Doppelklickfunktionen haben nicht fangen ein einziges Rechtsklick - aber sie haben einen doppelten Rechtsklick fangen)

self.header().sectionClicked.connect(self.headerMenu)
self.header().sectionHandleDoubleClicked.connect(self.headerMenu)
self.header().sectionDoubleClicked.connect(self.headerMenu)
self.header().sectionPressed.connect(self.headerMenu)

oder
2: ein Nachkomme von QHeaderView mit meiner eigenen Funktion mouse und verwenden, die für meine Header schreiben. Ich habe bisher nicht erfolgreich, die neue Header-Klasse an dem QTreeView Nachkommen in verbinden. Ich halte einen Segmentation Fault auf Laufzeit bekommen, mit nicht mehr Erklärung.

#in DiceView's init, where DiceHeaders is the QHeaderView descendant
self.setHeader(DiceHeaders())

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ich entdeckte die setContextMenuPolicy Funktion:

self.header().setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
self.header().customContextMenuRequested.connect(self.headerMenu)

Dann in headermenu:

def headerMenu(self, pos):
    globalPos = self.mapToGlobal(pos)
    menu = QMenu()
    menu.addAction("test item")
    selectedItem = menu.exec_(globalPos)
    if selectedItem:
        print "selected: ", selectedItem

Andere Tipps

würde ich für Lösung gehen n ° 2: Schreiben Sie Ihre eigene Klasse QHeaderView vererben. Ihre Segmentierungsfehler kann kommen aus einem Python / pyqt Glitch? Sie sollten sicherstellen, dass Sie DiceHeaders Objekt existiert durch einen Verweis auf sie zu halten.

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