精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Qt編程基礎之信號與槽機制

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

1. 信號與槽機制

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

			

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

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

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

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

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

2. 信號與槽的連接方式

在使用信號與槽的類中,必須在類的定義中加入宏Q_OBJECT。當一個信號被發射時,與其關聯的槽函數會被立即執行,就像正常調用一個函數一樣。只有當信號關聯的所有槽函數執行完畢后,才會執行發射信號處后面的代碼。

一個信號連接多個槽

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. 信號與槽的創建

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

創建信號:在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
創建槽:在mianwindow.h里聲明槽,在mianwindow.cpp里實現槽的定義
/***** 在 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();//聲明切換文本槽函數
  voidpushButtonClicked();//聲明按鈕點擊槽函數

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

/* 實現按鈕文本改變的槽函數 */
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"); //設定按鈕的文本
  /* 信號與槽連接 */
  connect(pushButton, SIGNAL(clicked()), this, SLOT(pushButtonClicked()));
  connect(this, SIGNAL(pushButtonTextChanged()), this, SLOT(changeButtonText()));
}

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

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

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

審核編輯:湯梓紅


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 信號
    +關注

    關注

    11

    文章

    2738

    瀏覽量

    76164
  • 編程
    +關注

    關注

    88

    文章

    3519

    瀏覽量

    93259
  • Qt
    Qt
    +關注

    關注

    1

    文章

    300

    瀏覽量

    37596

原文標題:Qt開發中的信號與槽機制

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

收藏 人收藏

    評論

    相關推薦

    Qt信號機制(一)

    一. 簡介就我個人來理解,信號機制與Windows下消息機制類似,消息機制是基于回調函數,Qt
    發表于 11-07 15:06

    Qt信號例子(二)

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

    QT自動鏈接信號機制

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

    【NanoPi M1 Plus試用體驗】【結項】-基于Qt環境下的FTP服務工具開發

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

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

      信號作為Qt的和新機制,在Qt編程中有著非常廣泛的應用。  事實上,我們在
    發表于 11-20 08:03

    信號是如何實現連接的呢

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

    基于Qt的遙控式設備控制的設計與實現

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

    Qt與Matlab混合編程

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

    Qt圖形編程基礎使用Qt編寫“Hello,World”程序實驗

    分享到:標簽:Qt圖形編程 Linux 操作系統 12.3 實驗內容使用Qt編寫Hello,World程序 1.實驗目的 通過編寫一個跳動的Hello,World字符串,進一步熟悉嵌入式Qt
    發表于 10-18 14:44 ?1次下載
    <b class='flag-5'>Qt</b>圖形<b class='flag-5'>編程</b>基礎<b class='flag-5'>之</b>使用<b class='flag-5'>Qt</b>編寫“Hello,World”程序實驗

    基于Qt組件的俄羅斯方塊設計

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

    Embeded linuxQt gdb

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

    一文詳解Qt信號函數機制

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

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

    在《Qt信號函數機制,此篇足矣》一文中已經描述了Qt信號
    的頭像 發表于 02-09 17:23 ?826次閱讀

    Qt“靈魂”Meta-Object系統

    Meta-Object即是Qt的元對象系統,下文都以元對象系統進行描述。在Qt中,具有標志性特征的則是信號函數機制,該
    的頭像 發表于 02-10 13:50 ?1488次閱讀

    詳細介紹Qt信號交流機制

    PyQT5中QGUI中當用戶改動一個QWidget的狀態時,可以通過支持的信號觸發相關的函數完成動作交互。
    的頭像 發表于 02-21 09:35 ?989次閱讀