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?

Foi útil?

Solução

Uma maneira fácil, mas talvez não exatamente o que você precisa:

  1. Ligar para o sinal 'CurrentChanged' do seu QTabWidget
  2. Na ranhura que é conectado ao sinal, criar um QMenu e preenchê-lo conforme necessário
  3. 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:

  1. QObject :: installEventFilter em seu QTabWidget, de modo que todos os eventos em seu QTabWidget são redirecionados para o seu próprio objeto.
  2. Em seu próprio objeto, Reimplementar QObject :: customEvent lidar com todos os eventos QMouseEvent.
  3. 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.

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