程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> QTabWidget標簽完成雙擊封閉的辦法(推舉)

QTabWidget標簽完成雙擊封閉的辦法(推舉)

編輯:關於JAVA

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標簽完成雙擊封閉的辦法(推舉),願望對年夜家有所贊助,假如年夜家有任何疑問請給我留言,小編會實時答復年夜家的。在此也異常感激年夜家對網站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved