成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

QT新手筆記01

ivyzhang / 3583人閱讀

摘要:自定義控件方法第一步創(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("

pressed[%1,%2]

"). 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)

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

相關(guān)文章

  • 程序員的自我修煉——新手如何學(xué)好編程

    摘要:熱門編程語言特點(diǎn)包羅萬物精細(xì)對底層知識涉列廣泛。特點(diǎn)語法簡單可移植性良好。編寫代碼的工具建議新手先使用編程工具,學(xué)習(xí)兩個月后再嘗試其他的編譯器,推薦使用大后期熟練掌握,因?yàn)閷?shí)際開發(fā)環(huán)境多在上進(jìn)行。 熱門編程語言 ? ? ?1、C++: ? ? ? ? ? ?特點(diǎn):包羅萬物、精細(xì)、對底層知識...

    ingood 評論0 收藏0
  • Python

    摘要:最近看前端都展開了幾場而我大知乎最熱語言還沒有相關(guān)。有關(guān)書籍的介紹,大部分截取自是官方介紹。但從開始,標(biāo)準(zhǔn)庫為我們提供了模塊,它提供了和兩個類,實(shí)現(xiàn)了對和的進(jìn)一步抽象,對編寫線程池進(jìn)程池提供了直接的支持。 《流暢的python》閱讀筆記 《流暢的python》是一本適合python進(jìn)階的書, 里面介紹的基本都是高級的python用法. 對于初學(xué)python的人來說, 基礎(chǔ)大概也就夠用了...

    dailybird 評論0 收藏0
  • Python - 收藏集 - 掘金

    摘要:首發(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)作。 如...

    546669204 評論0 收藏0
  • 【機(jī)器視覺】Qt集成Halcon開發(fā)環(huán)境詳解(一)

    摘要:也是可以設(shè)置使用靜態(tài)庫的溫馨提示對兼容性比較好,因此推薦使用編譯器。下安裝編譯器溫馨提示如果中已經(jīng)安裝編譯器,則該安裝步驟可以跳過。 00. 目錄 文章目錄 00...

    tianyu 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<