QTabWidget標簽實現(xiàn)雙擊關(guān)閉的方法(推薦)
用Qt做ARM,發(fā)現(xiàn)Qt4中QTabWidget原生的關(guān)閉按鍵(X)太小,用觸摸板很難按到。于是乎想到類似于瀏覽器的雙擊關(guān)閉功能,因為之前做過C#的資源管理器,以為可以直接綁定DoubleClick,可后來翻遍了也沒找到相應(yīng)的SLOT,結(jié)果在QWidget中捕捉信號,就是沒有QTabWidget標簽的鼠標事件,坑爹那!隨后,又在網(wǎng)上各種搜索,結(jié)果找到的是各種問題,每一個準確回答出來的.....最后思來想去,實在不行,就用最笨的方法,仿Hock實現(xiàn)!
于是乎,我重載了QTabWidget(由于tabBar()是protected,坑爹?。。?,這樣就可以獲取到標簽了。
class Tab : public QTabWidget
{
Q_OBJECT
public:
Tab(QWidget *parent = );
QTabBar* GetBar();
protected:
void mousePressEvent(QMouseEvent *event);
};
然后在實現(xiàn)一個事件過濾器,首先判斷事件是雙擊事件,然后判斷是否為標簽位置,如果是則刪除當前標簽頁,由于雙擊事件中必觸發(fā)單擊,即標簽頁選中事件,因此無需考慮雙擊其他標簽頁引起的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;
//實現(xiàn)雙擊關(guān)閉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
最后綁定到主函數(shù)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標簽實現(xiàn)雙擊關(guān)閉的方法(推薦),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
Spring Security賬戶與密碼驗證實現(xiàn)過程
這篇文章主要介紹了Spring Security賬戶與密碼驗證實現(xiàn)過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-03-03
Java SpringBoot實現(xiàn)文件上傳功能的示例代碼
這篇文章主要介紹了如何利用Java SpringBoot實現(xiàn)文件上傳功能,文中的示例代碼講解詳細,對我們學習有一定幫助,需要的可以參考一下2022-03-03
java遠程連接Linux執(zhí)行命令的3種方式完整代碼
在一些Java應(yīng)用程序中需要執(zhí)行一些Linux系統(tǒng)命令,例如服務(wù)器資源查看、文件操作等,這篇文章主要給大家介紹了關(guān)于java遠程連接Linux執(zhí)行命令的3種方式,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-06-06
springboot+redis+阿里云短信實現(xiàn)手機號登錄功能
這篇文章主要介紹了springboot+redis+阿里云短信實現(xiàn)手機號登錄功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01

