摘要:自定義控件方法第一步創(chuàng)建一個基類為勾選第二步在界面中創(chuàng)建所需控件第三步在這個中點(diǎn)擊名添加新文件添加一個繼承第四步在這個的中拖一個控件然后選擇右鍵提升輸入第一個的類名第五步關(guān)聯(lián)第一個類中的控件之間的聯(lián)系例子片段拓展在第一個創(chuàng)建的自定
QT自定義控件
方法:
第一步 創(chuàng)建一個QTProject,基類為QWidget(勾選ui); 第二步 在.ui界面中創(chuàng)建所需控件; 第三步 在這個Project中點(diǎn)擊Project名添加新文件, 添加一個C++ class,繼承QWidget; 第四步 在這個的.ui中拖一個Widget控件,然后選擇Widget右鍵提升,輸入第一個的類名; 第五步 關(guān)聯(lián)第一個類中的控件之間的聯(lián)系.
例子:horizintalSlider and spinbox
api(片段):
setRange(0,100) connect(ui->horizontalSlider,&QSlider::valueChanged,[=](int value){ ui->spinBox->setValue(value); connect(ui->spinBox, static_cast(&QSpinBox::valueChanged), ui->horizontalSlider,&QSlider::setValue);
拓展:
set two PushButtons and one can get the value of the horizontalSlider, the another one can set the value of the horizontalSlider.
Mind:
在第一個創(chuàng)建的自定義Widget中給出2個函數(shù), int get_value()----the first PushButton和void set_value(int value)--- the second PushButton, 最后通過按鈕的槽函數(shù)就可以實(shí)現(xiàn)了.
常用事件處理
方法: 在所有組件的父類 QWidget 中,定義了很多事件處理的函數(shù),如
? keyPressEvent():鍵盤按鍵按下事件
? keyReleaseEvent():鍵盤按鍵松開事件
? mouseDoubleClickEvent():鼠標(biāo)雙擊事件
? mouseMoveEvent():鼠標(biāo)移動事件
? mousePressEvent():鼠標(biāo)按鍵按下事件
? mouseReleaseEvent() : 鼠標(biāo)按鍵松開事件
? 等等
這些函數(shù)都是 protected virtual 的,也就是說,我們可以在子類中重新實(shí)
現(xiàn)這些函數(shù)。
例子:
第一步 創(chuàng)建一個QTProject,基類為QWidget(勾選ui); 第二步 在.ui中拖一個Label的控件; 第三步 在這個Project中點(diǎn)擊Project名添加新文件, 添加一個C++ class,繼承QLabel; 第四步 把窗口的Label控件提升為第三步創(chuàng)建的類; 第五步 在新建類中重寫方法中的虛函數(shù).
api(片段):
頭文件 #include//設(shè)置一開始就有鼠標(biāo)跟蹤 setMouseTracking(true) void mousePressEvent(QMouseEvent *e): e->x; e->y; int button=e->button(); if( button==Qt::LeftButton); .. button==Qt::RightButton; .. button==Qt::RightButton; ..//Label支持html的寫法 QString str=QString(" "). arg(x).arg(y); this->setText(str); void mouseMoveEvent(QMouseEvent *e): 其他同上,補(bǔ)充如下 int button=e->buttons(); ..if(buttons & Qt::LeftButton) ..if(buttons & Qt::RightButton) ..if(buttons & Qt::MidButton)
pressed[%1,%2]
3.事件分發(fā)器(事件分發(fā)函數(shù))
作用: 分發(fā)各種事件到事件處理函數(shù)中.
方法:
第一步 創(chuàng)建一個QTProject,基類為QWidget(勾選ui); 第二步 在.ui中拖一個Label的控件; 第三步 在這個Project中點(diǎn)擊Project名添加新文件, 添加一個C++ class,繼承QLabel; 第四步 把窗口的Label控件提升為第三步創(chuàng)建的類; 第五步 在新建類中重寫事件分發(fā)函數(shù).
api:
//事件分發(fā)函數(shù) bool myLabel::event(QEvent *e) { //如果返回值是true, 表示事件被處理了 //如果返回值是false,表示事件沒有被處理 比如:if(e->type()==QEvent::MouseMove) { return true; } //讓其他事件傳遞下去 return QLabel::event(e); }
4.事件過濾器
作用:
1.事件到達(dá)窗口之前要經(jīng)過事件過濾器 與事件分發(fā)器不同的地方: 如果窗口中有多個label,那么點(diǎn)擊多個label,這時,多個label都可以接收到鼠標(biāo)點(diǎn)擊事件, 如果要截取鼠標(biāo)點(diǎn)擊事件,那么可以從事件過濾器中統(tǒng)一截取; 2.事情過濾器是一個object的對象或子類的對象; 3.事件過濾器需要安裝; 4.在object的對象或子類對象中重寫事件過濾器函數(shù).
方法一:
第一步 創(chuàng)建一個QTProject,基類為QWidget(勾選ui); 第二步 在.ui中拖一個Label的控件; 第三步 在這個Project中點(diǎn)擊Project名添加新文件, 添加一個C++ class,繼承QLabel; 第四步 把窗口的Label控件提升為第三步創(chuàng)建的類; 第五步 在這個新建的類中重寫了事件過濾器函數(shù).
api:
//重寫事件過濾器函數(shù) bool myLabel::eventFilter(QObject *watched, QEvent *event) { //返回值是true,表示該事件受到攔截,不會到達(dá)窗口 //返回值是false,表示該事件沒有受到攔截 if(event->type()==QEvent::MouseButtonPress) { return true; } return false; } Finally://新建的Label類構(gòu)造函數(shù)中,安裝事件過濾器 this->installEventFilter(this);
方法二:
第一步 創(chuàng)建一個QTProject,基類為QWidget(勾選ui); 第二步 在.ui中拖一個Label的控件; 第三步 在這個Project中點(diǎn)擊Project名添加新文件, 添加一個C++ class,繼承QLabel; 第四步 把窗口的Label控件提升為第三步創(chuàng)建的類; 第五步 再創(chuàng)建一個類,繼承Object; 第六步 在該類中重寫了事件過濾器函數(shù);
api:
#include//事件過濾器的頭文件 bool myEvent::eventFilter(QObject *watched, QEvent *event) { //返回值是true,表示該事件受到攔截,不會到達(dá)窗口 //返回值是false,表示該事件沒有受到攔截 if(event->type()==QEvent::MouseButtonPress) { //return true; } return false; } Finally://安裝事件過濾器,在新建的繼承Label的類中 myEvent *filter=new MyEvent(this); this->installEventFilter(filter);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/114696.html
摘要:熱門編程語言特點(diǎn)包羅萬物精細(xì)對底層知識涉列廣泛。特點(diǎn)語法簡單可移植性良好。編寫代碼的工具建議新手先使用編程工具,學(xué)習(xí)兩個月后再嘗試其他的編譯器,推薦使用大后期熟練掌握,因?yàn)閷?shí)際開發(fā)環(huán)境多在上進(jìn)行。 熱門編程語言 ? ? ?1、C++: ? ? ? ? ? ?特點(diǎn):包羅萬物、精細(xì)、對底層知識...
摘要:首發(fā)于我的博客線程池進(jìn)程池網(wǎng)絡(luò)編程之同步異步阻塞非阻塞后端掘金本文為作者原創(chuàng),轉(zhuǎn)載請先與作者聯(lián)系。在了解的數(shù)據(jù)結(jié)構(gòu)時,容器可迭代對象迭代器使用進(jìn)行并發(fā)編程篇二掘金我們今天繼續(xù)深入學(xué)習(xí)。 Python 算法實(shí)戰(zhàn)系列之棧 - 后端 - 掘金原文出處: 安生??? 棧(stack)又稱之為堆棧是一個特殊的有序表,其插入和刪除操作都在棧頂進(jìn)行操作,并且按照先進(jìn)后出,后進(jìn)先出的規(guī)則進(jìn)行運(yùn)作。 如...
摘要:也是可以設(shè)置使用靜態(tài)庫的溫馨提示對兼容性比較好,因此推薦使用編譯器。下安裝編譯器溫馨提示如果中已經(jīng)安裝編譯器,則該安裝步驟可以跳過。 00. 目錄 文章目錄 00...
閱讀 3420·2021-11-24 09:39
閱讀 1808·2021-11-17 09:33
閱讀 3539·2021-10-12 10:12
閱讀 5043·2021-09-22 15:51
閱讀 1122·2019-08-30 13:11
閱讀 3584·2019-08-30 10:59
閱讀 576·2019-08-30 10:48
閱讀 1323·2019-08-26 13:48