QT信号连接信号 |
您所在的位置:网站首页 › qt自定义信号怎么触发 › QT信号连接信号 |
有时候代码可能复杂,我们需要一个信号连接另一个信号,比如例子中的下课不是直接运行时触发的,而是点击下课按钮 #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 |