摘要:自定義控件方法第一步創(chuàng)建一個(gè)基類(lèi)為勾選第二步在界面中創(chuàng)建所需控件第三步在這個(gè)中點(diǎn)擊名添加新文件添加一個(gè)繼承第四步在這個(gè)的中拖一個(gè)控件然后選擇右鍵提升輸入第一個(gè)的類(lèi)名第五步關(guān)聯(lián)第一個(gè)類(lèi)中的控件之間的聯(lián)系例子片段拓展在第一個(gè)創(chuàng)建的自定
QT自定義控件
方法:
第一步 創(chuàng)建一個(gè)QTProject,基類(lèi)為QWidget(勾選ui); 第二步 在.ui界面中創(chuàng)建所需控件; 第三步 在這個(gè)Project中點(diǎn)擊Project名添加新文件, 添加一個(gè)C++ class,繼承QWidget; 第四步 在這個(gè)的.ui中拖一個(gè)Widget控件,然后選擇Widget右鍵提升,輸入第一個(gè)的類(lèi)名; 第五步 關(guān)聯(lián)第一個(gè)類(lèi)中的控件之間的聯(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:
在第一個(gè)創(chuàng)建的自定義Widget中給出2個(gè)函數(shù), int get_value()----the first PushButton和void set_value(int value)--- the second PushButton, 最后通過(guò)按鈕的槽函數(shù)就可以實(shí)現(xiàn)了.
常用事件處理
方法: 在所有組件的父類(lèi) QWidget 中,定義了很多事件處理的函數(shù),如
? keyPressEvent():鍵盤(pán)按鍵按下事件
? keyReleaseEvent():鍵盤(pán)按鍵松開(kāi)事件
? mouseDoubleClickEvent():鼠標(biāo)雙擊事件
? mouseMoveEvent():鼠標(biāo)移動(dòng)事件
? mousePressEvent():鼠標(biāo)按鍵按下事件
? mouseReleaseEvent() : 鼠標(biāo)按鍵松開(kāi)事件
? 等等
這些函數(shù)都是 protected virtual 的,也就是說(shuō),我們可以在子類(lèi)中重新實(shí)
現(xiàn)這些函數(shù)。
例子:
第一步 創(chuàng)建一個(gè)QTProject,基類(lèi)為QWidget(勾選ui); 第二步 在.ui中拖一個(gè)Label的控件; 第三步 在這個(gè)Project中點(diǎn)擊Project名添加新文件, 添加一個(gè)C++ class,繼承QLabel; 第四步 把窗口的Label控件提升為第三步創(chuàng)建的類(lèi); 第五步 在新建類(lèi)中重寫(xiě)方法中的虛函數(shù).
api(片段):
頭文件 #include//設(shè)置一開(kāi)始就有鼠標(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的寫(xiě)法 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)建一個(gè)QTProject,基類(lèi)為QWidget(勾選ui); 第二步 在.ui中拖一個(gè)Label的控件; 第三步 在這個(gè)Project中點(diǎn)擊Project名添加新文件, 添加一個(gè)C++ class,繼承QLabel; 第四步 把窗口的Label控件提升為第三步創(chuàng)建的類(lèi); 第五步 在新建類(lèi)中重寫(xiě)事件分發(fā)函數(shù).
api:
//事件分發(fā)函數(shù) bool myLabel::event(QEvent *e) { //如果返回值是true, 表示事件被處理了 //如果返回值是false,表示事件沒(méi)有被處理 比如:if(e->type()==QEvent::MouseMove) { return true; } //讓其他事件傳遞下去 return QLabel::event(e); }
4.事件過(guò)濾器
作用:
1.事件到達(dá)窗口之前要經(jīng)過(guò)事件過(guò)濾器 與事件分發(fā)器不同的地方: 如果窗口中有多個(gè)label,那么點(diǎn)擊多個(gè)label,這時(shí),多個(gè)label都可以接收到鼠標(biāo)點(diǎn)擊事件, 如果要截取鼠標(biāo)點(diǎn)擊事件,那么可以從事件過(guò)濾器中統(tǒng)一截取; 2.事情過(guò)濾器是一個(gè)object的對(duì)象或子類(lèi)的對(duì)象; 3.事件過(guò)濾器需要安裝; 4.在object的對(duì)象或子類(lèi)對(duì)象中重寫(xiě)事件過(guò)濾器函數(shù).
方法一:
第一步 創(chuàng)建一個(gè)QTProject,基類(lèi)為QWidget(勾選ui); 第二步 在.ui中拖一個(gè)Label的控件; 第三步 在這個(gè)Project中點(diǎn)擊Project名添加新文件, 添加一個(gè)C++ class,繼承QLabel; 第四步 把窗口的Label控件提升為第三步創(chuàng)建的類(lèi); 第五步 在這個(gè)新建的類(lèi)中重寫(xiě)了事件過(guò)濾器函數(shù).
api:
//重寫(xiě)事件過(guò)濾器函數(shù) bool myLabel::eventFilter(QObject *watched, QEvent *event) { //返回值是true,表示該事件受到攔截,不會(huì)到達(dá)窗口 //返回值是false,表示該事件沒(méi)有受到攔截 if(event->type()==QEvent::MouseButtonPress) { return true; } return false; } Finally://新建的Label類(lèi)構(gòu)造函數(shù)中,安裝事件過(guò)濾器 this->installEventFilter(this);
方法二:
第一步 創(chuàng)建一個(gè)QTProject,基類(lèi)為QWidget(勾選ui); 第二步 在.ui中拖一個(gè)Label的控件; 第三步 在這個(gè)Project中點(diǎn)擊Project名添加新文件, 添加一個(gè)C++ class,繼承QLabel; 第四步 把窗口的Label控件提升為第三步創(chuàng)建的類(lèi); 第五步 再創(chuàng)建一個(gè)類(lèi),繼承Object; 第六步 在該類(lèi)中重寫(xiě)了事件過(guò)濾器函數(shù);
api:
#include//事件過(guò)濾器的頭文件 bool myEvent::eventFilter(QObject *watched, QEvent *event) { //返回值是true,表示該事件受到攔截,不會(huì)到達(dá)窗口 //返回值是false,表示該事件沒(méi)有受到攔截 if(event->type()==QEvent::MouseButtonPress) { //return true; } return false; } Finally://安裝事件過(guò)濾器,在新建的繼承Label的類(lèi)中 myEvent *filter=new MyEvent(this); this->installEventFilter(filter);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/114696.html
摘要:熱門(mén)編程語(yǔ)言特點(diǎn)包羅萬(wàn)物精細(xì)對(duì)底層知識(shí)涉列廣泛。特點(diǎn)語(yǔ)法簡(jiǎn)單可移植性良好。編寫(xiě)代碼的工具建議新手先使用編程工具,學(xué)習(xí)兩個(gè)月后再?lài)L試其他的編譯器,推薦使用大后期熟練掌握,因?yàn)閷?shí)際開(kāi)發(fā)環(huán)境多在上進(jìn)行。 熱門(mén)編程語(yǔ)言 ? ? ?1、C++: ? ? ? ? ? ?特點(diǎn):包羅萬(wàn)物、精細(xì)、對(duì)底層知識(shí)...
摘要:最近看前端都展開(kāi)了幾場(chǎng)而我大知乎最熱語(yǔ)言還沒(méi)有相關(guān)。有關(guān)書(shū)籍的介紹,大部分截取自是官方介紹。但從開(kāi)始,標(biāo)準(zhǔn)庫(kù)為我們提供了模塊,它提供了和兩個(gè)類(lèi),實(shí)現(xiàn)了對(duì)和的進(jìn)一步抽象,對(duì)編寫(xiě)線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書(shū), 里面介紹的基本都是高級(jí)的python用法. 對(duì)于初學(xué)python的人來(lái)說(shuō), 基礎(chǔ)大概也就夠用了...
摘要:首發(fā)于我的博客線程池進(jìn)程池網(wǎng)絡(luò)編程之同步異步阻塞非阻塞后端掘金本文為作者原創(chuàng),轉(zhuǎn)載請(qǐng)先與作者聯(lián)系。在了解的數(shù)據(jù)結(jié)構(gòu)時(shí),容器可迭代對(duì)象迭代器使用進(jìn)行并發(fā)編程篇二掘金我們今天繼續(xù)深入學(xué)習(xí)。 Python 算法實(shí)戰(zhàn)系列之棧 - 后端 - 掘金原文出處: 安生??? 棧(stack)又稱(chēng)之為堆棧是一個(gè)特殊的有序表,其插入和刪除操作都在棧頂進(jìn)行操作,并且按照先進(jìn)后出,后進(jìn)先出的規(guī)則進(jìn)行運(yùn)作。 如...
摘要:也是可以設(shè)置使用靜態(tài)庫(kù)的溫馨提示對(duì)兼容性比較好,因此推薦使用編譯器。下安裝編譯器溫馨提示如果中已經(jīng)安裝編譯器,則該安裝步驟可以跳過(guò)。 00. 目錄 文章目錄 00...
閱讀 3405·2021-11-24 09:39
閱讀 1797·2021-11-17 09:33
閱讀 3503·2021-10-12 10:12
閱讀 5018·2021-09-22 15:51
閱讀 1111·2019-08-30 13:11
閱讀 3571·2019-08-30 10:59
閱讀 563·2019-08-30 10:48
閱讀 1311·2019-08-26 13:48