J'ai utilisé QT comme bras et j'ai constaté que le bouton de fermeture natif (x) de QtabWidget dans QT4 est trop petit, et il est difficile à appuyer avec le pavé tactile. J'ai donc pensé à une fonction à double clic similaire au navigateur. Parce que j'avais déjà travaillé sur le C # Resource Manager, je pensais que je pouvais directement lier DoubleClick, mais après l'avoir fouillé, je n'ai pas pu trouver la fente correspondante. En conséquence, j'ai attrapé le signal dans le QWidget, qui était un événement de souris sans la balise QtabWidget. C'est une astuce! Ensuite, j'ai recherché diverses questions en ligne et j'ai trouvé diverses questions, et chacune a répondu avec précision ... enfin, après avoir pensé à cela, cela n'a vraiment pas fonctionné, j'ai donc utilisé la méthode la plus stupide pour imiter le jarret!
Donc, j'ai rechargé le qtabwidget (parce que tabbar () est protégé, c'est une arnaque!), Afin que je puisse obtenir la balise.
Class Tab: public qtabwidget {q_object public: tab (qwidget * parent =); Qtabbar * getBar (); Protégé: void MousePressEvent (événement QMouseEvent *); }; Ensuite, lors de la mise en œuvre d'un filtre d'événement, déterminez d'abord si l'événement est un événement à double cliquer, puis déterminez s'il s'agit de la position d'étiquette. Si c'est le cas, supprimez la page d'onglet actuelle. Étant donné que le clic doit être déclenché dans l'événement à double clic, c'est-à-dire que la page d'onglet est sélectionnée, il n'est donc pas nécessaire de considérer le problème de modification d'index causé par le double cliquer sur d'autres pages d'onglet.
#ifndef myeventfilter_h #define myeventfilter_h #include <qmainwindow> #include <qmouseevent> #include "tab.h" extern int tabindex_current; extern int tabindex_old; Onglet externe * TabWidget; TABLET QPOIR EXTERNE; extern int tabwidth; extern int tabheight; // Implémentez le double-clic pour fermer la classe TAB TAG MyEventFilter: public qObject {public: MyEventFilter (): qObject () {}; ~ MyEventFilter () {}; bool eventFilter (qObject * objet, qEvent * event) {if (event-> type () == qEvent :: MouseButTondblclick) {qMouseEvent * e = static_cast <qmouseEvent *> (événement); 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 (objet, événement); }; }; #endif // myeventfilter_h Enfin, liez à la fonction principale principale, afin que tous les événements puissent être capturés:
QApp-> InstalLeventFilter (new MyEventFilter ());
De plus, les informations de largeur doivent être mises à jour lorsque la page onglet est commutée (la hauteur n'est pas nécessaire pour être mise à jour):
void MainWindow :: UpdateBar () {tabindex_current = tabwidget-> currentIndex (); tabindex_old = tabindex_current; Qtabbar * bar = tabwidget-> getBar (); if (bar-> size (). width ()>) tabwidth = bar-> size (). width (); } Ce qui précède est la méthode de fermeture de double-clic de la balise QtabWidget qui vous est présentée par l'éditeur (recommandé). J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!