Question

J'ai écrit un descendant de QTreeView avec plusieurs colonnes. Je veux créer un menu contextuel qui apparaît WHE nle droit d'utilisateur clics sur les en-têtes de colonnes. J'ai essayé la capture des signaux de QTreeView pour cela, mais QTreeView ne semble pas émettre des signaux sur les en-têtes. QTreeView.header () fait. Je crois donc que je dois soit:
1: connecter l'un des signaux de QHeaderView à une fonction pop-up - je suis incapable de trouver un signal qui est déclenché sur un seul clic droit - J'ai essayé sectionClicked, sectionHandleDoubleClicked, sectionDoubleClicked, sectionPressed (pas surpris les fonctions double clic n'a pas pris un simple clic droit - mais ils attrapent un double clic droit)

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

ou,
2: écrire un descendant de QHeaderView avec ma propre fonction mousePressEvent, et l'utiliser pour mes en-têtes. Je l'ai été jusqu'à présent pas réussi à relier la nouvelle classe d'en-tête au descendant QTreeView. Je continue à obtenir une erreur de segmentation sur l'exécution, sans plus d'explications.

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

Toutes les idées?

Était-ce utile?

La solution

Je découvre la fonction setContextMenuPolicy:

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

Alors, dans headerMenu:

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

Autres conseils

J'aller pour la solution n ° 2: Écrivez votre propre classe héritant QHeaderView. Votre erreur de segmentation peut venir d'un pépin python / pyqt? Vous devez vous assurer que vous l'objet de DiceHeaders existe en gardant une référence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top