QTabWidget标签实现双击关闭(转)
2016-07-03 22:37
288 查看
重载了QTabWidget(由于tabBar()是protected),这样就可以获取到标签了。
然后在实现一个事件过滤器,首先判断事件是双击事件,然后判断是否为标签位置,如果是则删除当前标签页,由于双击事件中必触发单击,即标签页选中事件,因此无需考虑双击其他标签页引起的index变更问题。
最后绑定到主函数main中,这样就可捕捉到所有的事件了:
另外,需在标签页切换时更新宽度信息(高度无需更新):
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 }
相关文章推荐
- Qt中添加OpenCV库
- QT自制类分享 一图流按钮
- pyqt 加载资源文件
- 配置pyqt4开发环境, 之 Pycharm配置
- QT串口通信(1)
- 自动化测试.工具
- PyQt界面编程应用与实践
- ubuntu16.04 安装完Qt后,编译项目出现cannot find -lGL
- QT 文件拖放事件dropEvent和dragEnterEvent
- UFT开发实例:QTP调用OutLook自动发送邮件
- UFT开发实例:DataTable操作实例
- UFT开发实例:一个完整的测试框架源码
- UFT小知识点整理
- UFT检查点类型
- 基于Qt5的QGIS编译
- Qt学习笔记4---网络编程
- Qt学习笔记3---QMainWindow使用
- Qt学习笔记2
- 学习记录-Qt窗口控件的动态添加和删除
- QT学习之旅之1——Hello World