最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt信號與槽知識點總結(jié)歸納

 更新時間:2022年12月28日 16:20:21   作者:就要?宅在家  
信號和槽是一種高級接口,應用于對象之間的通信,它是QT的核心特性,下面這篇文章主要給大家介紹了關(guān)于Qt信號與槽知識點總結(jié)歸納的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

一.含義與使用

(一).含義

信號與槽是qt中一種常用的通信手段。發(fā)送方發(fā)送信號,接收方通過槽進行接收并完成具體任務。

簡單來講,就是通過發(fā)送一個函數(shù)(信號),接收方通過另一個函數(shù)(槽)完成任務。

(二).connect使用

用法上,通過connect函數(shù)進行連接。

connect(發(fā)送方地址,信號函數(shù),接收方地址,槽函數(shù));

比如我們舉如下例子:

通過點擊按鈕實現(xiàn)關(guān)閉窗口。

myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::myWidget)
{
    ui->setupUi(this);
    but = new QPushButton("close", this);
    but->move(200, 200);
    //將按鈕clicked信號函數(shù)與QWidget類的close槽函數(shù)連接
    connect(but, &QPushButton::clicked, this, &QWidget::close);
}

當我們進行點擊窗口操作時,執(zhí)行clicked函數(shù)進而觸發(fā)close關(guān)閉窗口。

如果使用的信號函數(shù)或槽函數(shù)有重載情況,那么這樣直接通過地址傳函數(shù)就 不可能了,因為無法區(qū)別參數(shù)。

此時需要使用函數(shù)指針完成指定重載版本的調(diào)用。

舉例如下:

A* pa = new A;
B* pb = new B;
void(A::*APtr)(QString) = &A::funcA;
void(B::*BPtr)(QString) = &B::funcB;
//指定調(diào)用參數(shù)為QString的重載版本
connect(pa, APtr, pb, BPtr);

在使用connect時有幾點需要注意:

1.信號函數(shù)與槽函數(shù)的參數(shù)類型必須匹配,且信號函數(shù)參數(shù)個數(shù)可以比槽函數(shù)多,但絕對不能少。

2.一個信號函數(shù)可以連接多個槽函數(shù)

3.多個信號函數(shù)可以連接同一個槽函數(shù)

QT4之下的版本不支持這種connect形式,只能通過如下形式使用:

connect( 發(fā)送方地址,SIGNAL( 信號函數(shù)(參數(shù)) ),接收方地址,SLOT( 槽函數(shù)(參數(shù)) ) );

SIGNAL和SLOT是宏,編譯時會將信號函數(shù)和槽函數(shù)用字符串替換,并且不會判斷參數(shù)是否相互匹配,因此只要不是Qt版本問題,并不推薦使用這種方式。

使用disconnect可以斷開信號與槽的連接,參數(shù)與connect一致。 

(三).信號函數(shù)

如果我們自定義信號函數(shù),有幾點需要注意:

1.信號函數(shù)需要使用signals關(guān)鍵字聲明

class A : public QObject
{
    Q_OBJECT
public:
    explicit A(QObject *parent = nullptr);
 
signals://以下均為信號函數(shù)
    void funcA();
    void funcA(QString str);
};

2.信號函數(shù)不能定義,只用聲明即可。

3.返回值為void

4.可帶參數(shù),可重載

5.可以使用emit關(guān)鍵字主動釋放信號觸發(fā)槽函數(shù)。

void test{
    emit A()->funcA();//使用無參版本
}

(四).槽函數(shù)

自定義槽函數(shù)也有幾點需要注意:

1.可聲明為類的任意成員函數(shù)(一般為public),較早版本必須在public slots關(guān)鍵字下聲明。

2.返回類型為void

3.可帶參數(shù),可重載

4.可以使用lambda表達式替換

二.示例

我們寫一個程序,按鈕按下時打開一個窗口同時按鈕顯示“close”,再次按下關(guān)閉窗口按鈕變成“open”。

myWidget::myWidget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::myWidget)
{
    ui->setupUi(this);
    //設置窗口
    setFixedSize(500, 500); 
    //設置按鈕
    but = new QPushButton("open", this);
    but->move(200, 200);
    but->setCheckable(true);//如果使用toggled必須先使用該函數(shù),clicked亦可。
 
    mw = new QWidget;//窗口
    mw->setWindowTitle("Gap");//窗口名
    //使用lambda表達式代替槽函數(shù)
    connect(but, &QPushButton::toggled, this, [&]()mutable{
        if(but->text() == "open"){
            mw->show();
            but->setText("close");
 
        }
        else{
            mw->close();
            but->setText("open");
 
        }
    });
 
    //定義一個按鈕end,按下直接關(guān)閉myWidget窗口退出程序
    QPushButton* end = new QPushButton("end", this);
    but->move(100, 200);
    connect(end, &QPushButton::clicked, this, &QWidget::close);
}

總結(jié)

到此這篇關(guān)于Qt信號與槽知識點總結(jié)歸納的文章就介紹到這了,更多相關(guān)Qt信號與槽內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++ 內(nèi)存分配處理函數(shù)set_new_handler的使用

    C++ 內(nèi)存分配處理函數(shù)set_new_handler的使用

    這篇文章主要介紹了C++ 內(nèi)存分配處理函數(shù)set_new_handler的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 深入理解c++中virtual關(guān)鍵字

    深入理解c++中virtual關(guān)鍵字

    本篇文章主要是對c++中virtual關(guān)鍵字進行了詳細的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-02-02
  • Cocos2dx實現(xiàn)數(shù)字跳動效果

    Cocos2dx實現(xiàn)數(shù)字跳動效果

    這篇文章主要為大家詳細介紹了Cocos2dx實現(xiàn)數(shù)字跳動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C語言實現(xiàn)學生個人消費管理系統(tǒng)

    C語言實現(xiàn)學生個人消費管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言學生個人消費管理系統(tǒng)開發(fā),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 基于Qt開發(fā)一個簡單的OFD閱讀器

    基于Qt開發(fā)一個簡單的OFD閱讀器

    這篇文章主要為大家詳細介紹了如何使用Qt框架開發(fā)一個功能強大且性能優(yōu)異的OFD閱讀器,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下
    2025-01-01
  • C語言實現(xiàn)哈夫曼樹的方法

    C語言實現(xiàn)哈夫曼樹的方法

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)哈夫曼樹的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • c++ 虛函數(shù),虛表相關(guān)總結(jié)

    c++ 虛函數(shù),虛表相關(guān)總結(jié)

    這篇文章主要介紹了c++ 虛函數(shù),虛表的的相關(guān)資料,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下
    2021-03-03
  • C語言實現(xiàn)簡單的貪吃蛇游戲的示例代碼

    C語言實現(xiàn)簡單的貪吃蛇游戲的示例代碼

    這篇文章主要為大家詳細介紹了C語言如何實現(xiàn)經(jīng)典貪吃蛇游戲,文中的示例代碼講解詳細,對我們學習C語言有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • C++迭代器失效解決辦法詳解

    C++迭代器失效解決辦法詳解

    這篇文章主要介紹了迭代器失效的概念,以及在vector、list和map等容器中插入和刪除操作導致迭代器失效的情況,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • C語言實現(xiàn)BMP圖像的讀寫功能

    C語言實現(xiàn)BMP圖像的讀寫功能

    這篇文章主要介紹了C語言實現(xiàn)BMP圖像的讀寫功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論

泾源县| 房产| 乐清市| 南汇区| 河池市| 连云港市| 永定县| 敦化市| 社旗县| 海阳市| 南宁市| 岑溪市| 安泽县| 格尔木市| 鲁山县| 商南县| 乐清市| 射洪县| 吉林市| 温泉县| 杭锦后旗| 长春市| 安泽县| 玛多县| 土默特右旗| 城步| 彭山县| 喀什市| 阳城县| 上虞市| 鄂托克前旗| 乳山市| 友谊县| 高唐县| 双江| 汤原县| 新和县| 望城县| 永济市| 陈巴尔虎旗| 青河县|