menu de contexto guia QTabWidget
-
19-09-2019 - |
Pergunta
Eu preciso para exibir um menu de contexto sempre que um guia é clicado e ele precisa reagir a essa guia específica. Existe alguma maneira de fazer isso sem subclasse-lo?
Solução
Uma maneira fácil, mas talvez não exatamente o que você precisa:
- Ligar para o sinal 'CurrentChanged' do seu QTabWidget
- Na ranhura que é conectado ao sinal, criar um QMenu e preenchê-lo conforme necessário
- Finalmente, na ranhura que é conectado ao sinal, chame QMenu :: exec (QCursor :: pos ())
Este terá uma função chamada sempre que o guia é alterada (não necessariamente clicado) e gerar um menu na posição atual do mouse.
maneira complicada, que faz exatamente o que você descreve:
- QObject :: installEventFilter em seu QTabWidget, de modo que todos os eventos em seu QTabWidget são redirecionados para o seu próprio objeto.
- Em seu próprio objeto, Reimplementar QObject :: customEvent lidar com todos os eventos QMouseEvent.
- Preencher um QMenu conforme necessário e chamar QMenu :: exec na posição do QMouseEvent você está segurando.
Outras dicas
criar um QMenu:
m_menu = new QMenu;
adicionar suas ações ao menu.
Criar um slot para ser chamada quando o menu de contexto solicitado na barra de abas:
connect(m_tabWidget->tabBar(), &QTabBar::tabBarClicked, this, &MyClass::on_contextMenuRequested);
No entalhe, mostrar o menu. Definição de fenda:
void MyClass::on_contextMenuRequested(int tabIndex)
{
m_menu->popup(QCursor::pos());
}
Se precisar índice do guia atual em outra função, use o seguinte:
m_tabWidget->tabBar()->currentIndex()
Eu acho que você precisa para criar sua própria classe que herda de QTabWidget e substituir o MousePressEvent (QMouseEvent) função protegida em que você pode criar o seu menu de contexto do botão direito.