QTabWidget標簽完成雙擊封閉的辦法(推舉)。本站提示廣大學習愛好者:(QTabWidget標簽完成雙擊封閉的辦法(推舉))文章只能為提供參考,不一定能成為您想要的結果。以下是QTabWidget標簽完成雙擊封閉的辦法(推舉)正文
用Qt做ARM,發明Qt4中QTabWidget原生的封閉按鍵(X)太小,用觸摸板很難按到。因而乎想到相似於閱讀器的雙擊封閉功效,由於之前做過C#的資本治理器,認為可以直接綁定DoubleClick,可後來翻遍了也沒找到響應的SLOT,成果在QWidget中捕獲旌旗燈號,就是沒有QTabWidget標簽的鼠標事宜,坑爹那!隨後,又在網上各類搜刮,成果找到的是各類成績,每個精確答復出來的.....最初思來想去,其實不可,就用最笨的辦法,仿Hock完成!
因而乎,我重載了QTabWidget(因為tabBar()是protected,坑爹啊!),如許便可以獲得到標簽了。
class Tab : public QTabWidget { Q_OBJECT public: Tab(QWidget *parent = ); QTabBar* GetBar(); protected: void mousePressEvent(QMouseEvent *event); };
然後在完成一個事宜過濾器,起首斷定事宜是雙擊事宜,然後斷定能否為標簽地位,假如是則刪除以後標簽頁,因為雙擊事宜中必觸發單擊,即標簽頁選中事宜,是以無需斟酌雙擊其他標簽頁惹起的index變革成績。
#ifndef MYEVENTFILTER_H #define MYEVENTFILTER_H #include <QMainWindow> #include <QMouseEvent> #include "tab.h" extern int tabindex_current; extern int tabindex_old; extern Tab *tabWidget; extern QPoint tableft; extern int tabwidth; extern int tabheight; //完成雙擊封閉Tab標簽 class 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(object,event); }; }; #endif // MYEVENTFILTER_H
最初綁定到主函數main中,如許便可捕獲到一切的事宜了:
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標簽完成雙擊封閉的辦法(推舉),願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!