لقد استخدمت QT كذراع ووجدت أن زر الإغلاق الأصلي (x) من QTABWidget في QT4 صغير جدًا ، ومن الصعب الضغط على لوحة اللمس. لذلك فكرت في وظيفة النقر المزدوج على غرار المتصفح. لأنني عملت على مدير الموارد C# من قبل ، اعتقدت أنه يمكنني ربط DoubleClick مباشرة ، ولكن بعد البحث من خلاله ، لم أتمكن من العثور على الفتحة المقابلة. نتيجة لذلك ، اكتشفت الإشارة في QWidget ، والتي كانت حدث الماوس بدون علامة QTABWidget. هذه خدعة! بعد ذلك ، قمت بتفتيش العديد من الأسئلة عبر الإنترنت ، ووجدت أسئلة مختلفة ، وأجبت كل منها بدقة ... أخيرًا ، بعد التفكير في الأمر ، لم تنجح حقًا ، لذلك استخدمت طريقة أغبى لتقليد Hock!
لذلك ، قمت بإعادة تحميل QTABWidget (لأن Tabbar () محمية ، إنها عملية احتيال!) ، حتى أتمكن من الحصول على العلامة.
علامة التبويب الفئة: public qtabwidget {q_object public: tab (qwidget *parent =) ؛ qtabbar* getBar () ؛ محمية: void mousepressevent (QMouseevent *event) ؛ } ؛ بعد ذلك ، عند تطبيق مرشح حدث ، حدد أولاً ما إذا كان الحدث عبارة عن حدث نقر مزدوج ، ثم تحديد ما إذا كان موضع التسمية. إذا كان الأمر كذلك ، احذف صفحة علامة التبويب الحالية. نظرًا لأنه يجب تشغيل النقرة في حدث النقر المزدوج ، أي أن صفحة علامة التبويب محددة ، لذلك ليست هناك حاجة للنظر في مشكلة تغيير الفهرس الناجمة عن النقر المزدوج على صفحات علامات التبويب الأخرى.
#ifndef myeventfilter_h #define myeventfilter_h #include <qmainwindow> #include <qmouseevent> #include "tab.h" extern int tabindex_current ؛ extern int tabindex_old ؛ tab extern *tabWidget ؛ طاولة QPOINT EXTERM ؛ extern int tabwidth ؛ extern int tabheight ؛ // تنفيذ انقر نقرًا مزدوجًا لإغلاق فئة علامة التبويب MyEventFilter: public qobject {public: myeventfilter (): qobject () {} ؛ ~ myEventFilter () {} ؛ bool eventFilter (Qobject* Object ، Qevent* event) {if (event-> type () == qevent :: mousebuttondblclick) {qmouseevent* e = static_cast <qmouseevent*> (event) ؛ 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 (كائن ، حدث) ؛ } ؛ } ؛ #endif // myeventfilter_h أخيرًا ، اربط الوظيفة الرئيسية الرئيسية ، بحيث يمكن التقاط جميع الأحداث:
QAPP-> InstalleventFilter (new MyEventFilter ()) ؛
بالإضافة إلى ذلك ، يجب تحديث معلومات العرض عند تبديل صفحة علامة التبويب (لا يلزم تحديث الارتفاع):
void mainwindow :: updateBar () {tabindex_current = tabWidget-> currentIndex () ؛ tabindex_old = tabindex_current ؛ qtabbar *bar = tabWidget-> getBar () ؛ if (bar-> size (). width ()>) tabWidth = bar-> size (). width () ؛ } ما سبق هو طريقة إغلاق النقر المزدوج لعلامة qtabwidget التي قدمها لك المحرر (موصى بها). آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!