Pregunta

He escrito un descendiente de QTreeView con múltiples columnas. Quiero crear un menú emergente que aparece Whe nEl usuario hace clic en los encabezados de columna. He intentado la captura de señales de QTreeView para esto, pero QTreeView no parece Emitir señales en las cabeceras. QTreeView.header () lo hace. Por lo tanto, creo que debe:
1: una conexión de señales de QHeaderView a una función emergente - No he sido capaz de encontrar una señal que se desencadena en un solo click derecho - He tratado sectionClicked, sectionHandleDoubleClicked, sectionDoubleClicked, sectionPressed (no sorprendió a los dobles funciones de clic no tomar un simple clic derecho - pero lo hacen coger un doble clic derecho)

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: escribir un descendiente de QHeaderView con mi propia función MousePressEvent, y el uso que para mis cabeceras. He tenido éxito hasta ahora en la conexión de la nueva clase de cabecera a la descendencia QTreeView. Sigo recibiendo un error de segmentación en tiempo de ejecución, sin más explicación.

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

¿Alguna idea?

¿Fue útil?

Solución

Me descubrió la función setContextMenuPolicy:

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

A continuación, en headerMenu:

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

Otros consejos

Me gustaría ir a la solución n ° 2: Escribir su propia clase que hereda QHeaderView. Su fallo de segmentación puede venir de una pitón / pyqt problema técnico? Usted debe asegurarse de que existe le DiceHeaders objeto manteniendo una referencia a él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top