Pergunta

Escrevi um descendente do Qtreeview com várias colunas. Quero criar um menu pop-up que apareça o que o usuário clica com o botão direito do mouse sobre os cabeçalhos da coluna. Eu tentei pegar sinais da QtreeView para isso, mas o QtreeView não parece emitir sinais nos cabeçalhos. QtreeView.Header () faz. Portanto, acredito que devo: também:
1: Conecte um dos sinais de QHeaderiew a uma função pop -up - não consegui encontrar um sinal que seja acionado em um único clique direito - tentei seção clicada, seção que não surpreende, as funções de cliques não capturaram, não capturar um único clique com o botão direito - mas eles pegam um clique com o botão direito duplo)

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: Escreva um descendente de QHeadeView com minha própria função MousePrimevent e use -a para meus cabeçalhos. Até agora, não tenho êxito em conectar a nova classe de cabeçalho ao descendente da Qtreeview. Eu continuo recebendo uma falha de segmentação no tempo de execução, sem mais explicações.

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

Alguma ideia?

Foi útil?

Solução

Eu descobri a função setContextMenupolicy:

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

Então, no headermenu:

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

Outras dicas

Eu iria para a solução n ° 2: escreva sua própria classe herdando o QHeadeView. Sua falha de segmentação pode ser vindo de uma falha Python/Pyqt? Você deve garantir que o objeto DiceHeaders exista mantendo uma referência a ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top