qt中實現自定義訊號與槽函式,訊號用於傳送並觸發槽函式,槽函式則是具體的功能實現,如下我們以老師學生為例子簡單學習一下訊號與槽函式的使用方法。
使用無引數訊號與槽:首先定義乙個teacher類,該類中用於傳送乙個訊號,其次student類,定義用於接收該訊號的槽函式,最後在widget中使用emit觸發訊號,當老師說下課時,學生請客吃飯。
teacher.h 中只需要定義訊號。定義乙個 void hungry(); 訊號。
#ifndef teacher_h
#define teacher_h
#include class teacher : public qobject
;#endif // teacher_h
student中需要定義槽宣告,並實現槽。
student.h
#ifndef student_h
#define student_h
#include class student : public qobject
;#endif // student_h
student.cpp
#include "student.h"
#include student::student(qobject *parent) : qobject(parent)
// 槽函式的實現過程如下
void student::treat()
widget.h定義訊號傳送函式,與類
#ifndef widget_h
#define widget_h
#include #include "student.h"
#include "teacher.h"
class widget : public qwidget
;#endif // widget_h
widget.cpp 具體實現
#include "widget.h"
widget::widget(qwidget *parent): qwidget(parent)
widget::~widget()
// 觸發訊號
void widget::classisover()
使用有參訊號傳遞:只需要再無參基礎上改進
widget.cpp
#include "widget.h"
widget::widget(qwidget *parent): qwidget(parent)
widget::~widget()
// 觸發訊號
void widget::classisover()
student.cpp
#include "student.h"
#include student::student(qobject *parent) : qobject(parent)
// 槽函式的實現過程如下
void student::treat()
void student::treat(qstring foodname)
student.h
#ifndef student_h
#define student_h
#include class student : public qobject
;#endif // student_h
teacher.h
#ifndef teacher_h
#define teacher_h
#include class teacher : public qobject
;#endif // teacher_h
widget.h
#ifndef widget_h
#define widget_h
#include #include #include #include "student.h"
#include "teacher.h"
class widget : public qwidget
;#endif // widget_h
點選按鈕觸發訊號:當我們點選按鈕時,自動觸發訊號。只需需改widget中的內容。
widget::widget(qwidget *parent): qwidget(parent)
匿名函式與槽
widget::widget(qwidget *parent): qwidget(parent), ui(new ui::widget)
(); // 使用mutable可以改變通過值傳遞的變數
int number = 10;
qpushbutton *btn_ptr1 = new qpushbutton("改變變數值",this);
btn_ptr1->move(100,100);
// 點選按鈕改變內部變數的值,由於值傳遞所以不會影響外部變數的變化
connect(btn_ptr1,&qpushbutton::clicked,this,[=]()mutable);
// 當點選以下按鈕時number還是原值
qpushbutton *btn_ptr2 = new qpushbutton("測試值傳遞",this);
btn_ptr2->move(100,200);
connect(btn_ptr2,&qpushbutton::clicked,this,[=]());
// 使用lambda表示式返回值,有時存在返回的情況
int ref = ()->int();
std::cout << "return = " << ref << std::endl;
}
Qt自定義訊號槽
qt自定義訊號槽,在控制台程式中實現 qt5 如下 qt5 include news h class news public qobject void send signals void new const qstring name private qstring m name reader.h i...
Qt 自定義訊號槽
使用 connect 可以讓我們連線系統提供的訊號和槽。但是,qt 的訊號槽機制並不僅僅是使用系統提供的那部分,還會允許我們自己設計自己的訊號和槽。這也是 qt 框架的設計思路之一,用於我們設計解耦的程式。本節將講解如何在自己的程式中自定義訊號槽。訊號槽不是 gui 模組提供的,而是 qt 核心特性...
一 自定義訊號槽
qt5 include news h class news public qobject void send signals void new const qstring name private qstring m name reader.h include include class reade...