QTabWidget menú contextual de pestañas
-
19-09-2019 - |
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?
Solución
La forma más fácil, pero posiblemente no exactamente lo que necesita:
- Conectar a la señal de su QTabWidget 'CurrentChanged'
- En la ranura que está conectado a la señal, crear un QMenu y poblarlo según sea necesario
- 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:
- QObject :: installEventFilter en su QTabWidget, de manera que todos los eventos en sus QTabWidget son redirigidos a su propio objeto.
- En su propio objeto, reimplementar QObject :: customEvent manejar todos los eventos QMouseEvent.
- 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.