QTabWidget标签实现双击关闭(转)

重载了QTabWidget(由于tabBar()是protected),这样就可以获取到标签了。

1 class Tab : public QTabWidget
2 {
3     Q_OBJECT
4 public:
5     Tab(QWidget *parent = 0);
6     QTabBar* GetBar();
7 protected:
8     void mousePressEvent(QMouseEvent *event);
9 };

然后在实现一个事件过滤器,首先判断事件是双击事件,然后判断是否为标签位置,如果是则删除当前标签页,由于双击事件中必触发单击,即标签页选中事件,因此无需考虑双击其他标签页引起的index变更问题。

 1 #ifndef MYEVENTFILTER_H
 2 #define MYEVENTFILTER_H
 3 #include <QMainWindow>
 4 #include <QMouseEvent>
 5 #include "tab.h"
 6
 7 extern int tabindex_current;
 8 extern int tabindex_old;
 9 extern Tab *tabWidget;
10 extern QPoint tableft;
11 extern int tabwidth;
12 extern int tabheight;
13
14 //实现双击关闭Tab标签
15 class myEventFilter: public QObject
16 {
17   public:
18   myEventFilter():QObject()
19   {};
20   ~myEventFilter(){};
21
22   bool eventFilter(QObject* object,QEvent* event)
23   {
24       if (event->type()==QEvent::MouseButtonDblClick)
25       {
26           QMouseEvent *e = static_cast<QMouseEvent*>(event);
27           QPoint pos = e->pos();
28           int x1 = tableft.x();
29           int x2 = tableft.x()+tabwidth;
30           int y1 = tableft.y();
31           int y2 = tableft.y()+tabheight;
32           if (pos.x() >= x1 && pos.y() >= y1 && pos.x() <= x2 && pos.y() <= y2)
33               tabWidget->removeTab(tabindex_current);
34       }
35       return QObject::eventFilter(object,event);
36   };
37 };
38
39 #endif // MYEVENTFILTER_H

最后绑定到主函数main中,这样就可捕捉到所有的事件了:

1 qApp->installEventFilter(new myEventFilter());

另外,需在标签页切换时更新宽度信息(高度无需更新):

1 void MainWindow::updateBar()
2 {
3     tabindex_current = tabWidget->currentIndex();
4     tabindex_old = tabindex_current;
5     QTabBar *bar = tabWidget->GetBar();
6     if (bar->size().width() > 0)
7          tabwidth = bar->size().width();
8 }
时间: 2024-10-19 10:24:19

QTabWidget标签实现双击关闭(转)的相关文章

selenium 对浏览器标签页进行关闭和切换

关闭标签页 # 1.关闭浏览器全部标签页 driver.quit() # 2.关闭当前标签页(从标签页A打开新的标签页B,关闭标签页A) driver.close() 切换标签页 from selenium import webdriver browser=webdriver.Firefox() browser.get('xxxxx') # 获取当前窗口句柄(窗口A) handle = browser.current_window_handle # 打开一个新的窗口 browser.find_e

QMainWindow + QtabWidget 实现 菜单栏 和 标签

from PyQt5.QtWidgets import ( QMainWindow, QMenu, QAction, QTabWidget) if __name__ == '__main__': import sys from PyQt5.QtWidgets import QApplication app = QApplication(sys.argv) ##################################################### mainWindow=QMainW

ExtJS4.1 ExtJS TabPanel 双击标签关闭该页

/*总觉得 TabPanel 生成的那个关闭按钮太小关闭的时候不太顺手 感觉不方便 所以想双击关闭tab方便些于是在网上找到下面的代码 URL:http://atian25.iteye.com/blog/413920可是用在我的系统框架上无效,本人用的是ExtJs4.1.不知道是不是我的问题,可是实在找不出错在哪里.于是 自己想了个办法 亲测支持ExtJs4.1 可能有点麻烦 可是没办法 上面那个方法 我实在是找不出问题在哪里*///////////////////---下面是网上找的方法 本人

js父窗口关闭时,子窗口随之关闭

最近,遇到一个权限管理的系统.由于权限管理的系统和本来的系统风格不一致,所有新打开一个窗口.问题就来了,admin注销之后,权限管理的窗口没有关闭.其他普通用户登录以后,仍然可以操作权限管理的窗口. 问题简化:admin注销的时候,或者main.html关闭的时候,打开的所有新窗口一起关闭.问题就解决了 直接看代码吧: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w

script标签

<script />的写法 刚刚跟着demo学习的过程中遇到了一个问题: <script type="text/javascript" src="jquery-1.1.3.pack.js" />  这样的写法貌似是不能执行的. <script type="text/javascript" src="jquery-1.1.3.pack.js" > </script> 只能这样结束.

射频识别技术漫谈(9)——动物标签HDX

半双工(HDX,Half Duplex)技术是ISO11784/11785中规定的另一种标签与读写器之间的通讯方式.读写器先打开射频场对标签充电以激活标签,然后关闭磁场,标签在读写器磁场关闭的情况下向读写器传送数据.不过HDX虽然是在动物标签标准中规定,但似乎更多的应用于和动物联系不大的工业识别领域.这也没什么大惊小怪的,标准是标准,实际应用中适合的才是最好的,就像信鸽虽然是动物,但许多信鸽的脚环识别号其实是ID64格式. 与全双工(FDX)相比,HDX 通常识别能力更强,因为HDX读写器的射频

HTML元素 属性 格式化标签

一.HTML元素: 1.元素指的是从开始标签到结束标签的所有代码         <p>This is my web page.</p> 开始标签:<p> 结束标签:</p> 元素内容:This is my web page. 2.HTML元素语法 元素的内容是开始标签与结束标签之间的内容 空元素在开始标签中进行关闭 大多数HTML元素可拥有属性 3.嵌套的HTML元素 大多数HTML元素都是可以嵌套的 二.HTML属性 1.标签可以拥有属性为元素提供更多的

SSRS 2012 建立图表 -- 序列标签属性

SSRS 2012 建立图表 -- 序列标签属性 序列内容除了利用序列图形(长条.线条.面积)大小呈现之外,还可以利用数据标签的方式呈现.数据标签默认为关闭状态,当右击序列选择"Show Data Labels"时,即可开启数据标签. 开启数据标签后,可以右击数据标签内容选择"Series Label Properties-",即可进一步设置数据标签属性内容. 在"General"标签页的"Label Data"属性,是用来显

HTML之标签

一.HTML 标签 HTML 标记标签通常被称为 HTML 标签 (HTML tag). •HTML 标签是由尖括号包围的关键词,比如 <html> •HTML 标签通常是成对出现的,比如 <b> 和 </b> •标签对中的第一个标签是开始标签,第二个标签是结束标签 •开始和结束标签也被称为开放标签和闭合标签 •HTML 文档描述网页 •HTML 文档包含 HTML 标签和纯文本 •HTML 文档也被称为网页 Web 浏览器的作用是读取 HTML 文档,并以网页的形式显