在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qt編程基礎(chǔ)之信號(hào)與槽機(jī)制

我快閉嘴 ? 來源:嵌入式攻城獅 ? 作者:嵌入式攻城獅 ? 2022-09-06 13:01 ? 次閱讀

1. 信號(hào)與槽機(jī)制

信號(hào)與槽(Signal & Slot)是Qt編程的基礎(chǔ),因?yàn)樾盘?hào)與槽的編程機(jī)制,在Qt中處理界面各個(gè)組件的交互操作時(shí)變得更加直觀和簡單。信號(hào)是在特定情況下被發(fā)射的事件,槽就是對(duì)信號(hào)響應(yīng)的函數(shù)。信號(hào)與槽關(guān)聯(lián)是用QObject::connect()函數(shù)實(shí)現(xiàn)的,其基本格式是:

			

QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));

connect()是QObject類的一個(gè)靜態(tài)函數(shù),而QObject是所有Qt類的基類,在實(shí)際調(diào)用時(shí)可以忽略前面的限定符,所以可以直接寫為:

connect(sender, SIGNAL(signal()), receiver, SLOT(slot()));
//sender:發(fā)射信號(hào)的對(duì)象 
//signal():是信號(hào)名稱。信號(hào)可以看做是特殊的函數(shù), 需要帶括號(hào),有參數(shù)時(shí)還需要指明參數(shù)。
//receiver:接收信號(hào)的對(duì)象 
//slot():槽函數(shù)的名稱,需要帶括號(hào),有參數(shù)時(shí)還需要指明參數(shù)。

SIGNAL和SLOT是Qt的宏,用于指明信號(hào)和槽,并將它們的參數(shù)轉(zhuǎn)換為相應(yīng)的字符串。也可以不使用這兩個(gè)宏,而使用雙引號(hào)代替:

connect(sender, "signal()", receiver, "slot()");

2. 信號(hào)與槽的連接方式

在使用信號(hào)與槽的類中,必須在類的定義中加入宏Q_OBJECT。當(dāng)一個(gè)信號(hào)被發(fā)射時(shí),與其關(guān)聯(lián)的槽函數(shù)會(huì)被立即執(zhí)行,就像正常調(diào)用一個(gè)函數(shù)一樣。只有當(dāng)信號(hào)關(guān)聯(lián)的所有槽函數(shù)執(zhí)行完畢后,才會(huì)執(zhí)行發(fā)射信號(hào)處后面的代碼。

一個(gè)信號(hào)連接多個(gè)槽

connect(pushButton, SIGNAL(clicked()), this, SLOT(hide());
connect(pushButton, SIGNAL(clicked()), this, SLOT(close());

多個(gè)信號(hào)連接一個(gè)槽

connect(pushButton1, SIGNAL(clicked()), this, SLOT(close()));
connect(pushButton2, SIGNAL(clicked()), this, SLOT(close()));
connect(pushButton3, SIGNAL(clicked()), this, SLOT(close()));

一個(gè)信號(hào)連接另一個(gè)信號(hào)

connect(pushButton, SIGNAL(objectNameChanged(QString)),this, SIGNAL(windowTitelChanged(QString)));

3. 信號(hào)與槽的創(chuàng)建

Qt 里有大量自定義好的信號(hào)與槽, 基本夠我們使用。若沒有找到想要的信號(hào)與槽,就需要定義自己的信號(hào)和槽了

創(chuàng)建信號(hào):在mianwindow.h里聲明信號(hào)即可,無需定義
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 

class MainWindow : public QMainWindow
{
  Q_OBJECT

public:
  MainWindow(QWidget *parent = nullptr);
  ~MainWindow();

signals:
  /* 聲明一個(gè)信號(hào),只需聲明,無需定義 */
  void pushButtonTextChanged();
};
#endif
創(chuàng)建槽:在mianwindow.h里聲明槽,在mianwindow.cpp里實(shí)現(xiàn)槽的定義
/***** 在 mianwindow.h 里直接聲明槽 *****/
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 

classMainWindow:public QMainWindow
{
  Q_OBJECT

public:
  MainWindow(QWidget *parent =nullptr);
  ~MainWindow();

signals: //聲明一個(gè)信號(hào),只需聲明,無需定義
  voidpushButtonTextChanged();

public slots:
  voidchangeButtonText();//聲明切換文本槽函數(shù)
  voidpushButtonClicked();//聲明按鈕點(diǎn)擊槽函數(shù)

private:
  QPushButton *pushButton;   //聲明對(duì)象
};
#endif 
/***** 在 mianwindow.cpp 里實(shí)現(xiàn)槽的定義 *****/
/* 實(shí)現(xiàn)按鈕點(diǎn)擊槽函數(shù) */
void MainWindow::pushButtonClicked()
{
  emit pushButtonTextChanged(); //使用emit發(fā)送信號(hào)
}

/* 實(shí)現(xiàn)按鈕文本改變的槽函數(shù) */
void MainWindow::changeButtonText()
{
  pushButton->setText("I was clicked!");
}

信號(hào)與槽的連接:在mainwindow.cpp中連接信號(hào)與槽

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
  this->resize(800,480);
  pushButton = new QPushButton(this);//實(shí)例化按鈕對(duì)象
  pushButton->setText("I am a Button"); //設(shè)定按鈕的文本
  /* 信號(hào)與槽連接 */
  connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));
  connect(this, SIGNAL(pushButtonTextChanged()), this, SLOT(changeButtonText()));
}

上面代碼編譯運(yùn)行后如下圖示,點(diǎn)擊按鈕后,pushButtonClicked()槽函數(shù)被觸發(fā)運(yùn)行,從而emitpushButtonTextChanged()信號(hào),進(jìn)而觸發(fā)changeButtonText()槽函數(shù)實(shí)現(xiàn)文本的切換

651517d0-2d9a-11ed-ba43-dac502259ad0.png

6532107e-2d9a-11ed-ba43-dac502259ad0.png

審核編輯:湯梓紅


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 信號(hào)
    +關(guān)注

    關(guān)注

    11

    文章

    2794

    瀏覽量

    76880
  • 編程
    +關(guān)注

    關(guān)注

    88

    文章

    3627

    瀏覽量

    93809
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    1

    文章

    307

    瀏覽量

    37960

原文標(biāo)題:Qt開發(fā)中的信號(hào)與槽機(jī)制

文章出處:【微信號(hào):嵌入式攻城獅,微信公眾號(hào):嵌入式攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Qt信號(hào)機(jī)制(一)

    一. 簡介就我個(gè)人來理解,信號(hào)機(jī)制與Windows下消息機(jī)制類似,消息機(jī)制是基于回調(diào)函數(shù),Qt
    發(fā)表于 11-07 15:06

    Qt信號(hào)例子(二)

    ))); } //實(shí)現(xiàn)用于接受pb點(diǎn)擊信號(hào)void MyMainWindows::SlotTest(){label->setText("clicked");//發(fā)送自定義的信號(hào),請(qǐng)注意信號(hào)
    發(fā)表于 11-07 15:13

    QT自動(dòng)鏈接信號(hào)機(jī)制

    name中的信號(hào)signal name和這個(gè)void on__()鏈接起來。這是QT不需要connect語句就可以自動(dòng)鏈接信號(hào)
    發(fā)表于 11-13 09:17

    【NanoPi M1 Plus試用體驗(yàn)】【結(jié)項(xiàng)】-基于Qt環(huán)境下的FTP服務(wù)工具開發(fā)

    Designer進(jìn)行界面設(shè)計(jì),由一個(gè)主界面和三個(gè)子界面組成。(3)添加代碼 建立信號(hào)函數(shù)映射機(jī)制信號(hào)
    發(fā)表于 06-08 14:51

    請(qǐng)問Qt編程信號(hào)信號(hào)處理程序的使用方法?

      信號(hào)作為Qt的和新機(jī)制,在Qt編程中有著非常廣泛的應(yīng)用。  事實(shí)上,我們?cè)?/div>
    發(fā)表于 11-20 08:03

    信號(hào)是如何實(shí)現(xiàn)連接的呢

    1.的連接過程分析Unix Signal產(chǎn)生者(鍵盤) --> 綁定[signal(id,某函數(shù)())] --> 接受者(“.c文件中的函數(shù)處理”)Qt 信號(hào)產(chǎn)生者(按鈕等
    發(fā)表于 01-18 09:48

    基于Qt的遙控式設(shè)備控制的設(shè)計(jì)與實(shí)現(xiàn)

    采用Qt 的一次編寫多處編譯運(yùn)行機(jī)制和其強(qiáng)大的信號(hào)機(jī)制,首先基于Qt 設(shè)計(jì)了遙控式控制設(shè)備的
    發(fā)表于 08-17 08:37 ?14次下載

    Qt與Matlab混合編程

    Qt與Matlab混合編程
    發(fā)表于 03-27 08:48 ?0次下載

    Qt圖形編程基礎(chǔ)使用Qt編寫“Hello,World”程序?qū)嶒?yàn)

    分享到:標(biāo)簽:Qt圖形編程 Linux 操作系統(tǒng) 12.3 實(shí)驗(yàn)內(nèi)容使用Qt編寫Hello,World程序 1.實(shí)驗(yàn)?zāi)康?通過編寫一個(gè)跳動(dòng)的Hello,World字符串,進(jìn)一步熟悉嵌入式Qt
    發(fā)表于 10-18 14:44 ?1次下載
    <b class='flag-5'>Qt</b>圖形<b class='flag-5'>編程</b>基礎(chǔ)<b class='flag-5'>之</b>使用<b class='flag-5'>Qt</b>編寫“Hello,World”程序?qū)嶒?yàn)

    基于Qt組件的俄羅斯方塊設(shè)計(jì)

    QT框架是諾基亞開發(fā)的一款跨平臺(tái)C++圖形用戶界面,允許真正的組件編程、易擴(kuò)展。信號(hào)是一種高級(jí)接口,應(yīng)用于對(duì)象間的通信,是QT的核心。很
    發(fā)表于 11-15 15:16 ?9次下載

    Embeded linuxQt gdb

    Embeded linuxQt gdb
    發(fā)表于 05-15 13:52 ?1327次閱讀
    Embeded linux<b class='flag-5'>之</b><b class='flag-5'>Qt</b> gdb

    一文詳解Qt信號(hào)函數(shù)機(jī)制

    信號(hào)用于多個(gè)對(duì)象之間的通信。信號(hào)機(jī)制Qt的核心特性,也是
    的頭像 發(fā)表于 02-07 09:14 ?3312次閱讀

    Qt“懶人寫法”之一鍵破“

    在《Qt信號(hào)函數(shù)機(jī)制,此篇足矣》一文中已經(jīng)描述了Qt信號(hào)
    的頭像 發(fā)表于 02-09 17:23 ?1037次閱讀

    Qt“靈魂”Meta-Object系統(tǒng)

    Meta-Object即是Qt的元對(duì)象系統(tǒng),下文都以元對(duì)象系統(tǒng)進(jìn)行描述。在Qt中,具有標(biāo)志性特征的則是信號(hào)函數(shù)機(jī)制,該
    的頭像 發(fā)表于 02-10 13:50 ?2021次閱讀

    詳細(xì)介紹Qt信號(hào)交流機(jī)制

    PyQT5中QGUI中當(dāng)用戶改動(dòng)一個(gè)QWidget的狀態(tài)時(shí),可以通過支持的信號(hào)觸發(fā)相關(guān)的函數(shù)完成動(dòng)作交互。
    的頭像 發(fā)表于 02-21 09:35 ?1190次閱讀
    主站蜘蛛池模板: 69国产视频| 国产精品片| 欧美人成网| 久久国产乱子伦精品免| 亚洲第一黄色网| 在线视频精品免费| 天堂网2021天堂手机版| 狠狠色噜狠狠狠狠色综合久| 亚洲一区二区在线| 夜夜爽8888| 色97色| 一区视频在线| 午夜影院网页| 日本四虎影院| 日本aaaaa级片| 人人搞人人| 黄色免费大全| 日本特黄色大片| 特级毛片免费视频观看| 中文字幕在线观看一区二区 | 欧美黄色免费看| 久久www免费人成高清| 深爱激情站| 真爽~张开腿~让我插| 国内精品久久影视| 国产99色| 色综合天天综一个色天天综合网| 亚洲免费国产| 毛片又大又粗又长又硬| 黄色片视频网| 瑟瑟网站免费| 亚洲欧美高清| 在线免费看污视频| 5g影院午夜伴侣| 国产亚洲情侣久久精品| 欧美一级黄色片在线观看| 天天射天天干天天舔| 国产色综合一区二区三区| 四虎永久影院| 天堂网中文字幕| 天堂网www在线观看|