Ich habe QT als Arm verwendet und festgestellt, dass die native Nahtaste (x) von QTabwidget in QT4 zu klein ist und es schwierig ist, mit dem Touchpad zu drücken. Also dachte ich an eine Doppelklick-Off-Funktion, die dem Browser ähnelt. Da ich schon einmal am C# Resource Manager gearbeitet hatte, dachte ich, ich könnte DoubleClick direkt binden, aber nachdem ich ihn durchsucht hatte, konnte ich den entsprechenden Slot nicht finden. Infolgedessen habe ich das Signal im Qwidget gefangen, ein Mausereignis ohne das QTabWidget -Tag. Das ist ein Trick! Dann suchte ich verschiedene Fragen online und fand verschiedene Fragen, und jeder beantwortete genau ... Nachdem ich darüber nachgedacht hatte, hat es wirklich nicht funktioniert, also habe ich die dümmste Methode verwendet, um Hock zu imitieren!
Also habe ich das QTABWIDget neu geladen (weil tabbar () geschützt ist, es ist ein Betrug!), Damit ich das Tag bekommen kann.
Registerkarte Klassen: public qtabwidget {q_object public: tist (qwidget *parent =); Qtabbar* getbar (); geschützt: void mousepressEvent (qmouseeEvent *Ereignis); }; Stellen Sie dann bei der Implementierung eines Ereignisfilters zuerst fest, ob das Ereignis ein Doppelklickereignis ist, und stellen Sie dann fest, ob es sich um die Etikettenposition handelt. Wenn ja, löschen Sie die aktuelle Registerkartenseite. Da der Klick im Ereignis von Doppelklick ausgelöst werden muss, wird die Registerkarte ausgewählt, sodass das Problem der Indexänderung nicht berücksichtigt werden muss, das durch Doppelklicken auf andere Registerkartenseiten verursacht wird.
#IFNDEF MYEVENTFILTER_H #DEFINE MYEVENTFILTER_H #INCLUDE <QMAINWINDOW> #INCLUDE <qmouseEvent> #include "tab.h" extern int tabindex_current; extern int tabindex_old; Registerkarte extern *tabwidget; extern qpoint tableft; externe int tabwidth; extern int tabheight; // Doppelklick implementieren, um die Registerkarte Tag-Klasse MyEventFilter: public QObject {public: myeventFilter (): qObject () {}; ~ myeventFilter () {}; bool eventFilter (qObject* Objekt, qevent* event) {if (event-> type () == qevent :: mausbuttondblclick) {qMouseEvent* e = static_cast <qmouseEvent*> (Ereignis); 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 (Objekt, Ereignis); }; }; #endif // myeventfilter_h Binden Sie schließlich an die Hauptfunktion, damit alle Ereignisse erfasst werden können:
Qapp-> InstalleventFilter (neuer MyeventFilter ());
Darüber hinaus müssen die Breiteninformationen aktualisiert werden, wenn die Registerkartenseite umgeschaltet ist (die Höhe muss nicht aktualisiert werden):
void mainWindow :: updateBar () {tabindex_current = tabwidget-> currentIndex (); tabindex_old = tabindex_current; Qtabbar *bar = tabwidget-> getbar (); if (bar-> size (). width ()>) tabwidth = bar-> size (). width (); } Die obige Methode ist die Methode zum Schließen des von dem Editors vorgestellten QTabWidget-Tags (empfohlen). Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!