91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是Qt信號槽機制

發布時間:2021-06-23 13:55:37 來源:億速云 閱讀:130 作者:chen 欄目:開發技術

這篇文章主要講解了“什么是Qt信號槽機制”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“什么是Qt信號槽機制”吧!

目錄
  • 1. 信號和槽概述

    • 1.1 信號的本質

    • 1.2 槽的本質

    • 1.3 信號和槽的關系

1. 信號和槽概述

信號槽是 Qt 框架引以為豪的機制之一。所謂信號槽,實際就是觀察者模式(發布-訂閱模式)。當某個`事件`發生之后,比如,按鈕檢測到自己被點擊了一下,它就會發出一個信號(signal)。這種發出是沒有目的的,類似廣播。如果有對象對這個信號感興趣,它就會使用連接(connect)函數,意思是,將想要處理的信號和自己的一個函數(稱為槽(slot))綁定來處理這個信號。也就是說,當信號發出時,被連接的槽函數會自動被回調。這就類似觀察者模式:當發生了感興趣的事件,某一個操作就會被自動觸發。

1.1 信號的本質

信號是由于用戶對窗口或控件進行了某些操作,導致窗口或控件產生了某個特定事件,這時候Qt對應的窗口類會發出某個信號,以此對用戶的挑選做出反應。

因此根據上述的描述我們得到一個結論:信號的本質就是事件,比如:

  • 按鈕單擊、雙擊

  • 窗口刷新

  • 鼠標移動、鼠標按下、鼠標釋放

  • 鍵盤輸入

那么在Qt中信號是通過什么形式呈現給使用者的呢?

  • 我們對哪個窗口進行操作, 哪個窗口就可以捕捉到這些被觸發的事件。

  • 對于使用者來說觸發了一個事件我們就可以得到Qt框架給我們發出的某個特定信號。

  • 信號的呈現形式就是函數, 也就是說某個事件產生了, Qt框架就會調用某個對應的信號函數, 通知使用者。

在QT中信號的發出者是某個實例化的類對象,對象內部可以進行相關事件的檢測。

1.2 槽的本質

在Qt中槽函數是一類特殊的功能的函數,在編碼過程中也可以作為類的普通成員函數來使用。之所以稱之為槽函數是因為它們還有一個職責就是對Qt框架中產生的信號進行處理。

舉個簡單的例子:

女朋友說:“我肚子餓了!”,于是我帶她去吃飯。

上邊例子中相當于女朋友發出了一個信號, 我收到了信號并其將其處理掉了。

  • 女朋友 -> 發送信號的對象, 信號內容: 我餓了

  • 我 -> 接收信號的對象并且處理掉了這個信號, 處理動作: 帶她去吃飯

在Qt中槽函數的所有者也是某個類的實例對象。

1.3 信號和槽的關系

在Qt中信號和槽函數都是獨立的個體,本身沒有任何聯系,但是由于某種特性需求我們可以將二者連接到一起,相當于一個綁定,在Qt中我們需要使用QOjbect類中的connect函數進二者的關聯。

QMetaObject::Connection QObject::connect(
    	const QObject *sender, PointerToMemberFunction signal, 
        const QObject *receiver, PointerToMemberFunction method, 
		Qt::ConnectionType type = Qt::AutoConnection);
- 參數:
	- sender: 發出信號的對象
	- signal: 屬于sender對象, 信號是一個函數, 這個參數的類型是函數指針, 信號函數地址
    - receiver: 信號接收者
	- method: 屬于receiver對象, 當檢測到sender發出了signal信號, 
              receiver對象調用method方法,信號發出之后的處理動作
                  
// connect函數相對于做了信號處理動作的注冊
// 調用conenct函數的sender對象的信號并沒有產生, 因此receiver對象的method也不會被調用
// method槽函數本質是一個回調函數, 調用的時機是信號產生之后, 調用是Qt框架來執行的
// connect中的sender和recever兩個指針必須被實例化了, 否則conenct不會成功
connect(const QObject *sender, &QObject::signal, 
        const QObject *receiver, &QObject::method);

1.4 通過實例加深理解

現在要實現一個簡單的功能,就說創建一個按鈕,點擊這個按鈕關閉窗口

然后思考,這個功能的信號發出者,信號接受者,以及發出什么信號,接受信號后怎么做

  • 按鈕: 信號發出者 -> QPushButton

  • 窗口: 信號的接收者和處理者 -> QWidget

  • 發出信號:被點擊 -> clicked

  • 槽函數,即如何處理 -> close

現在我們來實現一下

在ui中添加一個button,取名為closeBtn

什么是Qt信號槽機制

然后再Mainwindow.cpp 文件中

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->closeBtn,&QPushButton::clicked,this,&MainWindow::close);
}

MainWindow::~MainWindow()
{
    delete ui;
}

注意這條語句
connect(ui->closeBtn,&QPushButton::clicked,this,&MainWindow::close);
通過這條語句來實現綁定

現在我們來運行一下

什么是Qt信號槽機制

點擊按鈕,窗口關閉

感謝各位的閱讀,以上就是“什么是Qt信號槽機制”的內容了,經過本文的學習后,相信大家對什么是Qt信號槽機制這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

qt
AI

达尔| 怀安县| 灵宝市| 富宁县| 大安市| 吴忠市| 平顶山市| 神池县| 黑水县| 财经| 深州市| 炎陵县| 河曲县| 象州县| 高碑店市| 左贡县| 扎兰屯市| 博湖县| 崇仁县| 克拉玛依市| 清涧县| 龙里县| 罗甸县| 柳江县| 尉犁县| 古交市| 延庆县| 滨海县| 阿巴嘎旗| 黄骅市| 文山县| 远安县| 淳安县| 新郑市| 武清区| 奇台县| 石狮市| 昌宁县| 武乡县| 太和县| 沾益县|