一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

我快閉嘴 ? 來源:嵌入式攻城獅 ? 作者:嵌入式攻城獅 ? 2022-09-06 13:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

			

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

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

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

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

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

2. 信號與槽的連接方式

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

一個信號連接多個槽

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

多個信號連接一個槽

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

一個信號連接另一個信號

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

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

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

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

#include 
#include 

class MainWindow : public QMainWindow
{
  Q_OBJECT

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

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

#include 
#include 

classMainWindow:public QMainWindow
{
  Q_OBJECT

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

signals: //聲明一個信號,只需聲明,無需定義
  voidpushButtonTextChanged();

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

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

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

信號與槽的連接:在mainwindow.cpp中連接信號與槽

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

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

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

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

審核編輯:湯梓紅


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

    關(guān)注

    11

    文章

    2852

    瀏覽量

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

    關(guān)注

    88

    文章

    3689

    瀏覽量

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

    關(guān)注

    2

    文章

    314

    瀏覽量

    39076

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Qt信號機(jī)制(一)

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

    Qt信號例子(二)

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

    QT自動鏈接信號機(jī)制

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

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

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

    請問Qt編程信號信號處理程序的使用方法?

      信號作為Qt的和新機(jī)制,在Qt編程中有著非常廣泛的應(yīng)用?! ∈聦嵣?,我們在
    發(fā)表于 11-20 08:03

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

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

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

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

    Qt與Matlab混合編程

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

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

    分享到:標(biāo)簽:Qt圖形編程 Linux 操作系統(tǒng) 12.3 實驗內(nèi)容使用Qt編寫Hello,World程序 1.實驗?zāi)康?通過編寫一個跳動的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ū)嶒? />    </a>
</div>                              <div   id=

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

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

    Embeded linuxQt gdb

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

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

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

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

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

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

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

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

    PyQT5中QGUI中當(dāng)用戶改動一個QWidget的狀態(tài)時,可以通過支持的信號觸發(fā)相關(guān)的函數(shù)完成動作交互。
    的頭像 發(fā)表于 02-21 09:35 ?1467次閱讀