Qt修炼手册4_信号与槽
1.前言
為了處理個體間的通信事件,Qt提供了信號與槽。信號與槽不僅可以處理GUI上發生的事件,也可以實現個體間的數據通信。值得深入把握。
2.信號與槽
信號與槽是一種用于對象間通信的機制。為了用戶在GUI程序點擊按鈕控件時可運行指定函數,信號與槽提供可運行指定函數的框架。處理多種用戶事件前,信號和槽提供多種回調(Callback)函數。
Qt提供的所有控件擁有多種預設信號。例如,QPushButton控件的單擊(click)雙擊(double click)、鼠標經過(mouse over)等多重信號。同時,槽也提供了多種虛函數(virtual function)。
信號用于處理發生的事件,而槽則是指定從信號接受事件的處理函數。因此,可以將信號和槽視為一個管道(pipeline).
根據上面的描述,我們也能注意到一個很重要的一點:信號與槽通常不是1:1匹配的。一個信號可以關聯多個槽,一個槽也可以關聯多個信號。示意圖如下:
信號與槽之間的關聯函數是connect函數。
3.典型實例
主文件 main.cpp:
#include "mysigslot.h" #include <QtWidgets/QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);mySigSlot w;w.resize(400, 300);w.setWindowTitle("Example for Signal-Slot");w.show();return a.exec(); }頭文件 mySigSlot.h:
#ifndef MYSIGSLOT_H #define MYSIGSLOT_H#include <QtWidgets/QWidget> #include "ui_mysigslot.h" #include <qlabel.h> /*********************************************************/ class mySigSlot : public QWidget {Q_OBJECTpublic:mySigSlot(QWidget *parent = 0);~mySigSlot();private:Ui::mySigSlotClass ui; private:QLabel* lbl; }; /*********************************************************/ class SignalSlot : public QObject {Q_OBJECT public:SignalSlot() { m_value = 0; }int value() const { return m_value; }public slots :void setvalue(int value);signals:void valueChanged(int newvalue);private:int m_value; }; /*********************************************************/ #endif // MYSIGSLOT_H源文件 mySigSlot:#include "mysigslot.h"mySigSlot::mySigSlot(QWidget *parent): QWidget(parent) {ui.setupUi(this);lbl = new QLabel("",this);lbl->setGeometry(10, 10, 100, 40);SignalSlot s1, s2;QObject::connect(&s1, SIGNAL(valueChanged(int)),&s2, SLOT(setvalue(int)));s1.setvalue(100);lbl->setText(QString("%1").arg(s2.value())); } mySigSlot::~mySigSlot() { }void SignalSlot::setvalue(int value) {m_value = value; //assignment//為了發送信號 使用關鍵字emitemit valueChanged(m_value); //emit signal }實現結果:
信號與槽的流通過程:
首先定義原則“s1 的 valueChanged()函數被觸發,那么s2將被賦予與s1相同的值”。先對s1賦值,該過程激發了信號函數s1.valueChanged(),從而相應“信號-槽”管道,s2.value()獲得新值。最后顯示在QLabel控件上。
4.參考資料
[1]. 金大 [zhen. Qt 5開發實戰[M]. 人民郵電出版社, 2015.
總結
以上是生活随笔為你收集整理的Qt修炼手册4_信号与槽的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 飞鸽传书,去看了下WEBBROWSER的
- 下一篇: 王建宙:中国移动还未与苹果就iPhone