Usé Qt como brazo y descubrí que el botón de cierre nativo (x) de Qtabwidget en Qt4 es demasiado pequeño, y es difícil de presionar con el panel táctil. Así que pensé en una función de doble clic similar al navegador. Debido a que había trabajado en el administrador de recursos de C# antes, pensé que podía unir directamente a DoubleClick, pero después de buscarlo, no pude encontrar la ranura correspondiente. Como resultado, capté la señal en el QWidget, que fue un evento de ratón sin la etiqueta Qtabwidget. ¡Eso es un truco! Luego, busqué varias preguntas en línea y encontré varias preguntas, y cada una respondió con precisión ... Finalmente, después de pensarlo, realmente no funcionó, ¡así que utilicé el método más estúpido para imitar el hock!
Entonces, recargué el Qtabwidget (porque TabBar () está protegido, ¡es una estafa!), Para que pueda obtener la etiqueta.
pestaña de clase: public qtabwidget {Q_Object public: tab (QWidget *parent =); Qtabbar* getBar (); protegido: nulo mousePressEvent (QMoUSeEvent *evento); }; Luego, al implementar un filtro de evento, primero determine si el evento es un evento de doble clic y luego determine si es la posición de la etiqueta. Si es así, elimine la página de pestaña actual. Dado que el clic debe activarse en el evento de doble clic, es decir, se selecciona la página de pestañas, por lo que no es necesario considerar el problema de cambio de índice causado por el doble de clics en otras páginas de pestañas.
#ifndef myEventFilter_h #define myEventFilter_h #include <QMainWindow> #include <QMoUeEvent> #include "tab.h" ex externo TabIndex_current; extern int tabindex_old; pestaña externa *tabwidget; Tableft de Qpoint extern; extern int tabwidth; extern int tabheight; // Implementar doble clic para cerrar la clase de etiqueta de pestaña myEventFilter: public qobject {public: myEventFilter (): qobject () {}; ~ myEventFilter () {}; bool eventfilter (qobject* objeto, qevent* event) {if (event-> type () == qevent :: mouseButtonDblClick) {QMoUeEvent* e = static_cast <QMoUeeVent*> (evento); QPoint pos = e-> pos (); int x = tableft.x (); int x = tableft.x ()+tabwidth; int y = tableft.y (); int y = tableft.y ()+tabheight; if (pos.x ()> = x && pos.y ()> = y && pos.x () <= x && pos.y () <= y) tabwidget-> removeTab (tabindex_current); } return qobject :: eventFilter (objeto, evento); }; }; #endif // myeventFilter_h Finalmente, enlace a la función principal principal, para que todos los eventos puedan ser capturados:
qapp-> installeventFilter (new MyEventFilter ());
Además, la información de ancho debe actualizarse cuando se cambia la página de pestaña (no se requiere que la altura se actualice):
void mainwindow :: updateBar () {tabindex_current = tabwidget-> currentIndex (); tabindex_old = tabindex_current; Qtabbar *bar = tabwidget-> getBar (); if (bar-> size (). width ()>) tabwidth = bar-> size (). width (); } Lo anterior es el método de cierre de doble clic de la etiqueta QtabWidget presentada por el editor (recomendado). Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!