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

发布时间:2026/7/7 7:17:21
Qt信号槽在使用中避免循环绑定 假设有两个Object, object1和object2object1的信号绑定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_Hobject1.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_Hobject2.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(); }