Domanda

Ho scritto un discendente di QTreeView con più colonne. Voglio creare un menu a comparsa che appare WHE nla utente fa clic destro sopra le intestazioni delle colonne. Ho provato la cattura di segnali da QTreeView per questo, ma QTreeView non sembra segnali immettono in intestazioni. QTreeView.header () fa. Ritengo quindi che deve:
1: una connessione di segnali di QHeaderView a una funzione a finestra - sono stato in grado di trovare un segnale che viene attivato su un singolo click destro - ho cercato sectionClicked, sectionHandleDoubleClicked, sectionDoubleClicked, sectionPressed (non ha sorpreso le funzioni doppie click non prendere un singolo click destro - ma lo fanno prendere un doppio clic destro)

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

o,
2: scrivere un discendente di QHeaderView con la mia propria funzione mousePressEvent, e l'uso che per le mie intestazioni. Finora ho avuto successo nel collegare la nuova classe di intestazione al discendente QTreeView. Continuo a ricevere un errore di segmentazione in fase di esecuzione, senza più spiegazione.

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

Tutte le idee?

È stato utile?

Soluzione

ho scoperto la funzione setContextMenuPolicy:

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

Poi, 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

Altri suggerimenti

mi piacerebbe andare per soluzione n ° 2: Scrivi la tua classe che eredita QHeaderView. Il tuo errore di segmentazione può venire da un pitone / PyQt problema tecnico? Si dovrebbe fare in modo che si DiceHeaders oggetto esiste, mantenendo un riferimento ad esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top