Saya menggunakan QT sebagai lengan dan menemukan bahwa tombol tutup asli (x) Qtabwidget di QT4 terlalu kecil, dan sulit untuk ditekan dengan TouchPad. Jadi saya memikirkan fungsi klik dua kali yang mirip dengan browser. Karena saya telah bekerja pada manajer sumber daya C# sebelumnya, saya pikir saya dapat secara langsung mengikat Doubleclick, tetapi setelah mencari, saya tidak dapat menemukan slot yang sesuai. Akibatnya, saya menangkap sinyal di qwidget, yang merupakan acara mouse tanpa tag Qtabwidget. Itu trik! Kemudian, saya mencari berbagai pertanyaan secara online, dan menemukan berbagai pertanyaan, dan masing -masing menjawab secara akurat ... Akhirnya, setelah memikirkannya, itu benar -benar tidak berhasil, jadi saya menggunakan metode paling bodoh untuk meniru Hock!
Jadi, saya memuat ulang qtabwidget (karena tabbar () dilindungi, ini adalah penipuan!), Sehingga saya bisa mendapatkan tag.
Tab kelas: public qtabwidget {q_object public: tab (qwidget *parent =); Qtabbar* getBar (); Dilindungi: void mousepressEvent (qmouseEvent *event); }; Kemudian, saat menerapkan filter acara, pertama-tama tentukan apakah acara tersebut merupakan acara klik dua kali, dan kemudian tentukan apakah itu posisi label. Jika demikian, hapus halaman tab saat ini. Karena klik harus dipicu dalam acara klik dua kali, yaitu, halaman tab dipilih, sehingga tidak perlu mempertimbangkan masalah perubahan indeks yang disebabkan oleh klik dua halaman tab lainnya.
#ifndef myeventfilter_h #define myeventfilter_h #include <QmainWindow> #include <QMouseEvent> #include "tab.h" extern int tabindex_current; extern int tabindex_old; tab Extern *tabwidget; Extern Qpoint Tableft; Extern int tabwidth; Extern int tabheight; // Menerapkan Klik dua kali untuk menutup kelas tag tab MyEventFilter: Public Qobject {public: myEventFilter (): qObject () {}; ~ myEventFilter () {}; bool eventFilter (qObject* objek, qevent* event) {if (event-> type () == qevent :: mousebutTondBlClick) {qMouseEvent* e = static_cast <qmouseEvent*> (event); Qpoint pos = e-> pos (); int x = Tableft.x (); int x = tabelft.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 (objek, event); }; }; #endif // myeventfilter_h Akhirnya, berikatan dengan fungsi utama utama, sehingga semua peristiwa dapat ditangkap:
qapp-> installEventFilter (myeventfilter baru ());
Selain itu, informasi lebar perlu diperbarui ketika halaman tab diaktifkan (tinggi tidak perlu diperbarui):
void mainWindow :: updateBar () {tabindex_current = tabwidget-> currentIndex (); tabIndex_old = TabIndex_Current; Qtabbar *bar = tabwidget-> getBar (); if (bar-> size (). width ()>) tabwidth = bar-> size (). width (); } Di atas adalah metode klik dua kali penutupan tag Qtabwidget yang diperkenalkan kepada Anda oleh editor (disarankan). Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!