? 訊號與槽機制
訊號與槽機制(signal & slot)是qt獨創的事件響應與訊息處理機制
它允許乙個物件在觸發事件時,發出訊號,其它物件接收訊號,然後呼叫相應的槽函式進行響應處理
訊號與槽是一種形象的比喻,乙個物件發射出訊號,其它物件通過槽來接收訊號,然後處理訊號
? 訊號槽機制的使用方法
#include
#include
intmain
(int argc,
char
*ar**)
? 訊號槽機制的使用細節
qlineedit *edit;
qpushbutton *button;
qobject::
connect
(edit,
signal
(textchanged
(const qstring &))
, button,
signal
(clicked()));
qpushbutton *button;
qobject::
disconnect
(button,
signal
(clicked()
)slot
(exit()));
// directconnection,單執行緒,直接呼叫槽函式,如果有多個槽,則按連線順序依次呼叫
qobject::
connect
(button,
signal
(clicked()
)slot
(exit()
), qt::directconnection)
;// queuedconnection,將訊號放到訊息佇列中,再開乙個執行緒取訊息執行槽函式,當前執行緒立刻執行其它**
qobject::
connect
(button,
signal
(clicked()
)slot
(exit()
), qt::queuedconnection)
;// blockingqueuedconnection,將訊號放到訊息佇列中,再開乙個執行緒取訊息執行槽函式,當前執行緒等待槽執行緒執行完畢才執行其它**
qobject::
connect
(button,
signal
(clicked()
)slot
(exit()
), qt::blockingqueuedconnection)
;// autoconnection,如果發射訊號和接收訊號的**處於同乙個執行緒當中,則使用directconnection,否則使用queuedconnection
qobject::
connect
(button,
signal
(clicked()
)slot
(exit()
), qt::autoconnection)
;// uniqueconnection,如果訊號和槽已經連線過,則不再連線,這不是一種連線方式,而是一種連線選項,可以與以上四種連線方式通過位運或算來聯合使用
auto type =
static_cast
<:connectiontype>
(qt::uniqueconnection | qt::autoconnection)
; qobject::
connect
(button,
signal
(clicked()
)slot
(exit()
), type)
;
? 訊號槽機制用於普通物件訊號槽機制實際上是定義於qobject類中的功能特性
所以它不僅可以用於控制項之間的事件響應,還可以應用於任意繼承自qobject的普通qt物件
以下是乙個錢包類,當錢包裡的金錢發生變更時,會發出金錢變更的訊號,槽函式接收到這個訊號後,會列印最新的金錢數量
#ifndef wallet_h
#define wallet_h
#include
#include
using
namespace std;
class
wallet
:public qobject
;#endif
#include
"wallet.h"
wallet::
wallet
(qobject *parent)
:qobject
(parent)
void wallet::
initmoney
(long money)
void wallet::
addmoney
(long extramoney)
void wallet::
onmoneychange
(long money)
#include
"wallet.h"
intmain
(int argc,
char
*ar**)
? 快速連線訊號和槽qmetaobject提供了乙個connectslotsbyname方法,可以根據物件名和訊號函式名,自動連線對應的槽函式
比如qobject類中包含乙個名為pushbutton的成員變數,pushbutton含有乙個名為clicked的訊號函式,qobject類中包含乙個名為on_pushbutton_clicked的槽函式,通過qmetaobject::connectslotsbyname方法即可將pushbutton::clicked訊號與qobject::on_pushbutton_clicked槽連線起來
#ifndef mainwindow_h
#define mainwindow_h
#include
#include
class
mainwindow
:public qmainwindow
;#endif
#include
"mainwindow.h"
#include
mainwindow::
mainwindow
(qwidget *parent)
:qmainwindow
(parent)
void mainwindow::
on_pushbutton_clicked()
qmetaobject::connectslotsbyname所做的工作實際相當於
qobject::
connect
(pushbutton,
signal
(click)
,this
,slot
(on_pushbutton_clicked)
);
當我們通過qtdesigner設計ui介面時,我們可以右鍵選擇【go to slot】,來讓qtcreator幫我們自動生成這些**
我們只需直接在on_pushbutton_clicked方法裡面編寫**即可,這樣就大幅減少了訊號和槽的連線工作
QT零基礎學習之路
qt 學習之路 目錄 序qt 前言 hello,world 訊號槽自定義訊號槽 qt 模組簡介 mainwindow 簡介 新增動作 資源檔案 物件模型 布局管理器 選單欄 工具欄和狀態列 對話方塊簡介 對話方塊資料傳遞 標準對話方塊 qmessagebox 深入 qt5 訊號槽新語法 檔案對話方塊...
零基礎學QT 020 C 中的函式指標
函式指標 顧名思義,函式指標是指向函式的指標,通過指標便可以呼叫函式 函式指標可以指向具有相同引數列表和返回值的同類函式,這種設計,使得我們可以根據情況,呼叫不同的函式去處理相同的資料 定義和使用函式指標 void showsum int a,int b void showproduct int a...
《零基礎學Qt 4程式設計》書的內容簡介
qt 是跨平台應用程式和ui 框架,可用來編寫應用程式,無須重新編寫源 便可跨不同的桌面和嵌入式作業系統進行部署。使用qt 開發出來的軟體,已經在各行各業中得到了越來越廣泛的應用。本書內容基於最新發布的 qt 4.5 版,共分為 13章,按照qt知識結構的層次和讀者的學習規律,循序漸進 由淺入深的對...