QT信号连接信号

您所在的位置:网站首页 qt自定义信号怎么触发 QT信号连接信号

QT信号连接信号

2024-05-31 05:26| 来源: 网络整理| 查看: 265

有时候代码可能复杂,我们需要一个信号连接另一个信号,比如例子中的下课不是直接运行时触发的,而是点击下课按钮

#include "mainwindow.h" #include "ui_mainwindow.h" #include "QPushbutton.h" MainWindow::MainWindow(QWidget *parent) :     QMainWindow(parent),     ui(new Ui::MainWindow) {     ui->setupUi(this);     //创建一个老师对象     this->tc = new Teacher(this);     //创建一个学生对象     this->st = new Student(this);     void(Teacher::*teachersignal2)(void) =  &Teacher::Hungry;     void(Student::*studentslot2)(void) =  &Student::Treat;     connect(tc,teachersignal, st, studentslot);     QPushButton *btn = new QPushButton("下课",this);     this->resize(600,400);     connect(tc,teachersignal2, st, studentslot2);     connect(btn,&QPushButton::clicked,tc,teachersignal2); } MainWindow::~MainWindow() {     delete ui; }

扩展内容

断开信号 使用disconnect(tc,teachersignal2, st, studentslot2); 一个信号可以连接多个槽函数 多个信号可以连接一个槽函数

在teacher类加入一个crying信号

#ifndef TEACHER_H #define TEACHER_H #include class Teacher : public QObject { Q_OBJECT public: explicit Teacher(QObject *parent = nullptr); signals: void Hungry(); void Hungry(QString foodName); void Crying(); //老师感动哭了 }; #endif // TEACHER_H # void(Teacher::*teachersignal)(QString) = &Teacher::Hungry; void(Student::*studentslot)(QString) = &Student::Treat; void(Teacher::*teachersignal2)(void) = &Teacher::Hungry; void(Student::*studentslot2)(void) = &Student::Treat; void(Teacher::*teachersignal3)(void) = &Teacher::Crying; connect(tc,teachersignal, st, studentslot); //classIsOver(); QPushButton *btn = new QPushButton("下课",this); this->resize(600,400); //connect(btn,&QPushButton::clicked,this,&MainWindow::classIsOver); connect(tc,teachersignal2, st, studentslot2); connect(tc,teachersignal3, st, studentslot2); connect(btn,&QPushButton::clicked,tc,teachersignal2); connect(btn,&QPushButton::clicked,tc,teachersignal3);

代码中我使用qpushbutton触发了两个信号,同理我也可以使用不同信号触发同一个槽函数

信号和槽函数的参数必须一一对应 信号参数个数可以多余槽的参数个数,但类型要一一对应

Qt4版本以前的信号与槽的连接 连接无参 connect(tc,SIGNAL(Hungry()),st,SLOT(Treat())); 优点,参数直观。缺点,类型不做检测(编译不做检测,运行报错)

Qt5以上支持Qt4的写法,反之不支持。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3