Я использовал 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 <qmousevent> #include "tab.h" extern int tabindex_current; extern int tabindex_old; ВКЛЮЧЕНИЕ ВАШЕГО *TABWIDGET; extern qpoint tableft; Extern int tabwidth; extern int tabheight; // Реализовать двойной щелчок, чтобы закрыть класс тегов вкладок MyeventFilter: public Qobject {public: myeventFilter (): qobject () {}; ~ myeventfilter () {}; Bool EventFilter (QObject* Object, Qevent* Event) {if (event-> type () == Qevent :: MouseButTOndBlClick) {qMouseVent* 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 (Object, Event); }; }; #endif // myeventfilter_h Наконец, свяжитесь с основной функцией, чтобы можно было захватить все события:
qapp-> stalleventfilter (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!