国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

七、Qt 信號和槽

這篇具有很好參考價值的文章主要介紹了七、Qt 信號和槽。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在QT4以上的版本,在窗體上用可以通過選中控件,然后點擊鼠標右鍵單擊按鈕,選擇“轉(zhuǎn)到槽”??梢宰詣觿?chuàng)建信號和槽。

七、Qt 信號和槽,QT C++,qt,c++

選擇clicked(),并點擊 ok

七、Qt 信號和槽,QT C++,qt,c++

Qt Creator會給頭文件和代碼文件自動添加 這個按鈕的單擊事件(信號和槽)。

七、Qt 信號和槽,QT C++,qt,c++

不同的控件,信號不全是一樣的,根據(jù)控件的使用場景不同,包含的信號也不一樣。比如下拉列表框的信號和按鈕的不太一樣,沒有按鈕的單擊信號,只有選擇信號

七、Qt 信號和槽,QT C++,qt,c++

以上是用QT新版本的特性來創(chuàng)建信號和槽。比較方便。

下邊我們來介紹自定義信號和槽的綁定。首先介紹connect函數(shù):

connect(信號發(fā)送者對象, 信號, 信號接收者對象, 槽, 信號和槽之間的連接模式)

connect??函數(shù)有5個參數(shù),其中第五個參數(shù)為信號和槽的連接模式,此參數(shù)有默認模式=AutoConnection。

enum ConnectionType {

AutoConnection,

DirectConnection,

QueuedConnection,

BlockingQueuedConnection,

UniqueConnection = 0x80

};

AutoConnection:自動連接,默認模式。連接類型會在信號發(fā)送時決定。如果接收者和發(fā)送者在同一個線程,則自動使用Qt::DirectConnection類型;如果接收者和發(fā)送者不在一個線程,則自動使用Qt::QueuedConnection類型。 DirectConnection:直接連接,槽函數(shù)會在信號發(fā)送的時候直接被調(diào)用,槽函數(shù)和信號發(fā)送者在同一線程。效果看上去就像是在發(fā)送信號的位置調(diào)用了槽函數(shù)。無論槽函數(shù)所屬對象在哪個線程,槽函數(shù)都在發(fā)射信號的線程內(nèi)執(zhí)行。 emit語句后面的代碼將在與信號關(guān)聯(lián)的所有槽函數(shù)執(zhí)行完畢后才被執(zhí)行。 QueuedConnection:隊列連接,信號發(fā)出后會暫時被放到一個消息隊列中,需等到接收對象所屬線程的事件循環(huán)取得控制權(quán)時才取得該信號,然后執(zhí)行和信號關(guān)聯(lián)的槽函數(shù),這種方式既可以在同一線程內(nèi)傳遞消息也可以跨線程操作。 emit語句后的代碼將在發(fā)出信號后立即被執(zhí)行,無需等待槽函數(shù)執(zhí)行完畢,槽函數(shù)在接收者所依附線程內(nèi)執(zhí)行。 BlockingQueuedConnection:槽函數(shù)的調(diào)用時機與Qt::QueuedConnection一致,區(qū)別在于發(fā)送者emit完信號后所在線程會阻塞,直到槽函數(shù)運行完畢。并且接收者和發(fā)送者絕對不能在一個線程,否則程序會死鎖。在多線程間需要同步的場合可能需要這個。 Qt::UniqueConnection:這個flag可以通過按位或(|)與以上四個結(jié)合在一起使用。當這個flag設(shè)置時,當某個信號和槽已經(jīng)連接時,再進行重復(fù)的連接就會失敗。也就是為了避免重復(fù)連接。

以下拉列表框控件QCombobox舉例,當下拉選項改變時,會觸發(fā)相關(guān)的槽:

// QT4 信號和槽最常用也是最常見的連接方式為使用:

connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(currentIndexChanged(int))); connect(ui->comboBox, SIGNAL(currentIndexChanged(QString)), this, SLOT(currentIndexChanged(QString)));

以上代碼需要寫到窗體的構(gòu)造函數(shù)里

七、Qt 信號和槽,QT C++,qt,c++

然后需要在頭文件中聲明

currentIndexChanged(int index)

currentIndexChanged(QString text)

七、Qt 信號和槽,QT C++,qt,c++

然后在代碼文件中實現(xiàn)這兩個函數(shù)

七、Qt 信號和槽,QT C++,qt,c++

以上的寫法是在Qt4中,使用SIGNAL和SLOT這兩個宏,將信號和槽轉(zhuǎn)成了字符串形式,是利用的字符串進行的匹配。如果信號和槽不匹配,編譯工程時是不會報錯的!

在Qt5版本中對信號和槽采用了新的方法:基于函數(shù)地址的強制類型轉(zhuǎn)換或重載,如果信號和槽的形參不匹配,在編譯時就會報錯:

connect(ui->comboBox, QOverload::of(&QComboBox::currentIndexChanged), this, [=](int index){

QMessageBox::information(this, "index", QString::number(index));

});

connect(ui->comboBox, &QComboBox::currentTextChanged, this, [=](const QString &text){

QMessageBox::information(this, "text", text);

});

七、Qt 信號和槽,QT C++,qt,c++

上邊的定法中[]有以下三種用法,說明如下:

[] 空的捕獲列表,不會捕獲任何外部變更,也不能訪問任何外部變量

connect(button,&QPushButton::clicked,[](){

qDebug()

});

[=] 拷貝,外部變量以值傳遞,不能修改外部變量的值

int nCount = 0;

[=] 所有 [nCount] [=nCount]

[&]引用,可以修改外部變量的值

int nCount = 0;

connect(button,&QPushButton::clicked,[&](){ //也可以寫成[&nCount]

nCount ++;

qDebug()

});

?QOverload??是QT5.7版本之后才加入的,

語法格式:??QOverload::of(函數(shù)地址)??

作用:返回指定參數(shù)的重載函數(shù)。

QT5中的信號和槽的連接使用模板:

connect(

發(fā)送者對象,

static_cast(&發(fā)送者類名::信號函數(shù)名),

this,

static_cast(&接收者類名::槽函數(shù)名)

);

connect(

發(fā)送者對象,

qOverload::of(&發(fā)送者類名::信號),

this,

qOverload::of(&接收者類名::槽)

);

QObject::connect(m_test, QOverload::of(&FunctionTest::valueChangedflag),m_data, &Dataprocess::SignalOutputFlag);

這行代碼是用于在Qt中建立信號與槽的連接。信號valueChangedflag來自FunctionTest對象,它的參數(shù)類型是QString和bool。槽SignalOutputFlag來自Dataprocess對象。當valueChangedflag信號被觸發(fā)時,會調(diào)用SignalOutputFlag槽函數(shù)。

該連接的作用是將FunctionTest的信號與Dataprocess的槽函數(shù)進行關(guān)聯(lián),以便在valueChangedflag信號觸發(fā)時,通過調(diào)用SignalOutputFlag槽函數(shù)來處理相關(guān)邏輯。

請注意,根據(jù)代碼上下文和實際需求,m_test和m_data應(yīng)該是對象的指針或引用。此外,確保在連接信號與槽之前,F(xiàn)unctionTest和Dataprocess類都已正確定義和聲明。

QOverload::of(&FunctionTest::valueChangedflag) 是一個用于獲取成員函數(shù)指針的靜態(tài)函數(shù)模板。

在這里,QOverload 是一個模板類,提供了多個靜態(tài)成員函數(shù) of,用于獲取特定參數(shù)簽名的成員函數(shù)指針。QString 和 bool 是參數(shù)類型。FunctionTest::valueChangedflag 是一個信號函數(shù),它將被連接到槽函數(shù)。

通過使用 QOverload::of(&FunctionTest::valueChangedflag),可以在連接信號和槽時指定正確的參數(shù)類型,并確保信號函數(shù)與槽函數(shù)的參數(shù)匹配。

請注意, QOverload 類是 Qt 提供的用于信號和槽連接的輔助類,它提供了一種類型安全的方法來處理函數(shù)指針的重載問題。它允許在連接信號和槽時檢查參數(shù)類型的一致性,以避免潛在的編譯錯誤和運行時錯誤。

connect(comboBox, QOverload::of(&QComboBox::currentIndexChanged),[=](int index){

/* do ... */

});

《寫在最前邊》

《一、QT的前世今生》

《二、QT下載、安裝及問題解決(windows系統(tǒng))》


《三、Qt Creator使用》????

???????《四、Qt 的第一個demo-CSDN博客》

《五、帶登錄窗體的demo》

《六、新建窗體時,幾種窗體的區(qū)別》?

《七、Qt 信號和槽》????????文章來源地址http://www.zghlxwxcb.cn/news/detail-803532.html

到了這里,關(guān)于七、Qt 信號和槽的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Qt 信號和槽機制

    Qt 信號和槽機制

    一. 簡介 ????????在Qt中使用信號和槽機制來完成對象之間的協(xié)同操作。簡單來說,信號和槽都是函數(shù),比如按下窗口上的一個按鈕后想要彈出一個對話框,那么就可以將這個按鈕的單擊信號和我們定義的槽關(guān)聯(lián)起來,在這個槽中可以創(chuàng)建一個對話框,并且顯示它。這樣,

    2024年01月18日
    瀏覽(27)
  • 【Qt】信號和槽機制

    【Qt】信號和槽機制

    目錄 一、認識信號和槽 二、connect函數(shù) 三、自定義槽函數(shù) 四、自定義信號 五、帶參數(shù)的信號和槽 六、信號和槽斷開連接 七、信號和槽存在的意義 八、Lambda表達式定義槽函數(shù) 概述 在Qt中,用戶和控件的每次交互過程稱為一個事件。如\\\"用戶點擊按鈕\\\"是一個事件,\\\"用戶關(guān)閉窗

    2024年02月22日
    瀏覽(26)
  • 07.QT信號和槽-2

    07.QT信號和槽-2

    ????????在Qt中,允許?定義信號的發(fā)送?以及接收?,即可以?定義信號函數(shù)和槽函數(shù)。但是對于?定義的信號函數(shù)和槽函數(shù)有?定的書寫規(guī)范。 1.1 自定義信號 (1)?定義信號函數(shù)必須寫到\\\"signals\\\"下; (2)返回值為void,只需要聲明,不需要實現(xiàn); (3)可以有參數(shù),

    2024年04月14日
    瀏覽(21)
  • [Qt的學(xué)習(xí)日常]--信號和槽

    [Qt的學(xué)習(xí)日常]--信號和槽

    前言 作者 :小蝸牛向前沖 名言 :我可以接受失敗,但我不能接受放棄 ??如果覺的博主的文章還不錯的話,還請 點贊,收藏,關(guān)注??支持博主。如果發(fā)現(xiàn)有問題的地方歡迎?大家在評論區(qū)指正 本期學(xué)習(xí):什么是信號和槽,自定義槽函數(shù)和信號函數(shù),信號和槽的傳參,斷開,

    2024年04月28日
    瀏覽(18)
  • 20221210 QT----信號和槽的使用

    20221210 QT----信號和槽的使用

    什么是信號(signal) 以QPushButton為例: (1)按下按鈕時,會觸發(fā)一個mousePressEvent事件,此時會發(fā)出一個pressed信號; (2)松開按鈕時,會觸發(fā)一個mouseReleaseEvent事件,此時會發(fā)出released和clicked信號。 事件的種類有很多,不同的事件都對應(yīng)著不同的信號,當事件發(fā)生時,對應(yīng)

    2024年02月15日
    瀏覽(25)
  • 02 qt基本控件及信號和槽

    02 qt基本控件及信號和槽

    功能:顯示一個字符串內(nèi)容 主要接口函數(shù) 構(gòu)造函數(shù): 賦值運算符重載: 功能函數(shù): 1)基本數(shù)據(jù)類型(int,float,double,char*)轉(zhuǎn)換成字符串 number(long , int ) : QString number(int , int ) : QString number(uint , int ) : QString number(ulong , int ) : QString number(qlonglong , int ) : QString number(qulonglong , int

    2024年02月12日
    瀏覽(21)
  • qt信號和槽避免多次連接

    qt同一個信號和槽多次連接,則槽函數(shù) 會觸發(fā)多次 (默認),可能不是我們想要的結(jié)果。 有3種方法可以解決這個問題: 因為初始化函數(shù)在在整個程序中只運行一次,所以這里面連接信號和槽,就能避免重復(fù)連接問題了。 Qt::UniqueConnection 的作用是:如果該信號以前沒連接過

    2024年02月10日
    瀏覽(47)
  • Qt快速學(xué)習(xí)(一)--對象,信號和槽

    Qt快速學(xué)習(xí)(一)--對象,信號和槽

    目錄 1.Qt概述 1.1 什么是Qt 2.2?手動創(chuàng)建 2.3?pro文件 2.4?一個最簡單的Qt應(yīng)用程序 ? ? ? ?3 第一個Qt小程序 3.1 按鈕的創(chuàng)建 3.2 對象模型(對象樹) ??????3.3?Qt窗口坐標體系 4 信號和槽機制 ????????4.1 系統(tǒng)自帶的信號和槽 4.2 自定義信號和槽 ????4.3信號槽的拓展 ????

    2024年02月12日
    瀏覽(16)
  • QT基礎(chǔ)之——ui文件以及信號和槽機制

    QT基礎(chǔ)之——ui文件以及信號和槽機制

    ? ? ? ? 上一節(jié)我們講了除界面文件ui文件其他的所有文件,這一節(jié)我們來介紹一下ui文件:在文件目錄中我們能看到界面文件這一欄,點擊展開我們可以看到一個以\\\".ui\\\"結(jié)尾的文件,雙擊我們會看到如下界面: ? ? ? ? 我們在右側(cè)選中l(wèi)abel和PushButton拖入到工作臺上的窗口中,

    2024年04月08日
    瀏覽(23)
  • qt解決信號和槽連接時傳遞額外參數(shù)的問題

    QSignalMapper 是 Qt 框架中的一個類,用于解決信號和槽連接時傳遞額外參數(shù)的問題。當一個信號被觸發(fā)時,QSignalMapper 可以將該信號與一個特定的參數(shù)關(guān)聯(lián)起來,并將信號與對應(yīng)的槽函數(shù)進行連接。 下面是關(guān)于 QSignalMapper 的一些詳細解釋: 1.作用: QSignalMapper 類的主要作用是在一

    2024年02月07日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包