Qt信号槽传const&和传值有什么不同 | 您所在的位置:网站首页 › const和引用 › Qt信号槽传const&和传值有什么不同 |
之前一直在纠结Qt的信号槽是否要传引用,如果传引用会不会有悬挂引用的问题。 故参考Copied or Not Copied: Arguments in Signal-Slot Connections?这篇博客测试一下 CopyTest.h #include class CCopyable { public: // qRegisterMetaType的类需要默认构造函数 CCopyable(); CCopyable(int id, const QString &name); CCopyable(const CCopyable &rhs); ~CCopyable(); CCopyable &operator=(const CCopyable &rhs); private: int m_id; QString m_name; }; class CSender : public QObject { Q_OBJECT public: CSender(QObject *parent = nullptr); ~CSender() {} void sendSignal(); signals: void sendConstRef(const CCopyable &c); void sendValue(CCopyable c); void testSig(QString); void testSig(QString, int); //void testSig(const QString&); }; class CReceiver : public QObject { Q_OBJECT public: CReceiver(QObject *parent = nullptr); ~CReceiver() {} public slots: void receiveConstRef(const CCopyable &c); void receiveValue(CCopyable c); }; void signalSlotCopyTest();CopyTest.cpp #include "CopyTest.h" #include #include #include #define CaseNum 4 #define EnableQueuedConnection CCopyable::CCopyable() { } CCopyable::CCopyable(int id, const QString &name) : m_id(id) , m_name(name) { } CCopyable::~CCopyable() { } CCopyable::CCopyable(const CCopyable &rhs) { qDebug() |
CopyRight 2018-2019 实验室设备网 版权所有 |