Qt信号槽在使用中避免循环绑定

📅 2026/7/7 7:33:39 👁️ 阅读次数 📝 编程学习
Qt信号槽在使用中避免循环绑定

假设有两个Object, object1和object2

object1的信号绑定object2的槽函数
object2的信号绑定object1的槽函数
在object2的槽函数触发时,发送object2的信号,object1的槽函数会被触发,在object1的槽函数中,发送object1的信号,又会导致object2的槽函数触发,就会导致死循环。

object1.h

#ifndef OBJECT1_H #define OBJECT1_H #include <QObject> class Object1 : public QObject { Q_OBJECT public: Object1(); signals: void object1Signal(); public slots: void object1Slot(); }; #endif // OBJECT1_H

object1.cpp

#include "object1.h" #include <QDebug> Object1::Object1() { } void Object1::object1Slot() { qDebug() << __FUNCTION__; emit object1Signal(); }

object2.h

#ifndef OBJECT2_H #define OBJECT2_H #include <QObject> class Object2 : public QObject { Q_OBJECT public: Object2(); signals: void object2Signal(); public slots: void object2Slot(); }; #endif // OBJECT2_H

object2.cpp

#include "object2.h" #include <QDebug> Object2::Object2() { } void Object2::object2Slot() { qDebug() << __FUNCTION__; emit object2Signal(); }

main.cpp

#include "widget.h" #include <QApplication> #include <QObject> #include "object1.h" #include "object2.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); Object1 obj1; Object2 obj2; QObject::connect(&obj1, SIGNAL(object1Signal()), &obj2, SLOT(object2Slot())); QObject::connect(&obj2, SIGNAL(object2Signal()), &obj1, SLOT(object1Slot())); emit obj1.object1Signal(); return a.exec(); }