Pregunta

Tengo que mostrar un menú contextual cada vez que se hace clic en una ficha sobre y tiene que reaccionar a esa pestaña específica. ¿Hay alguna manera de hacer esto sin la subclasificación de él?

¿Fue útil?

Solución

La forma más fácil, pero posiblemente no exactamente lo que necesita:

  1. Conectar a la señal de su QTabWidget 'CurrentChanged'
  2. En la ranura que está conectado a la señal, crear un QMenu y poblarlo según sea necesario
  3. Finalmente, en la ranura que está conectado a la señal, llame QMenu :: exec (QCursor :: pos ())

Esto hará que una función llamada cada vez que se cambia la pestaña (no necesariamente hace clic) y generar un menú en la posición actual del ratón.

manera complicada, lo que hace exactamente lo que usted describe:

  1. QObject :: installEventFilter en su QTabWidget, de manera que todos los eventos en sus QTabWidget son redirigidos a su propio objeto.
  2. En su propio objeto, reimplementar QObject :: customEvent manejar todos los eventos QMouseEvent.
  3. Rellenar un QMenu según sea necesario y llamar QMenu :: exec en la posición de la QMouseEvent estás manejando.

Otros consejos

crear un QMenu:

m_menu = new QMenu;

añadir sus acciones al menú.

Crea una ranura que se llamará cuando solicitó menú contextual en la barra de pestañas:

connect(m_tabWidget->tabBar(), &QTabBar::tabBarClicked, this, &MyClass::on_contextMenuRequested);

En la ranura, mostrar el menú. Definición de ranura:

void MyClass::on_contextMenuRequested(int tabIndex)
{
    m_menu->popup(QCursor::pos());
}

Si necesita índice de la ficha actual en otra función, utilice lo siguiente:

m_tabWidget->tabBar()->currentIndex()

Creo que se necesita para crear su propia clase que hereda de QTabWidget y anular la MousePressEvent (QMouseEvent) función protegida en la que puede crear su menú contextual de clic derecho.

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