C C Qt 訊號自定義槽函式

2022-07-09 06:48:11 字數 3061 閱讀 8688

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...