關於Qt訊號/槽的引數型別
阿新 • • 發佈:2019-02-15
1 可以使用引用型別引數嗎
曾一度認為訊號/槽引數如果使用指標/引用,則當訊號傳輸到槽的時候,所傳輸的指標/引用指向記憶體已經釋放,因此槽接收到的是野指標/無效引用。因此,訊號/槽的引數只能使用值傳遞。
現在才發現上面的認識是錯誤的。在單執行緒的情況之下,就算訊號/槽使用了引用型別的引數也是允許的。由於是單執行緒,槽接收到引用時傳送訊號的函式其實還沒結束,因此就算傳遞過來的是一個區域性變數的引用,也是有效的。當槽返回的時候,傳送訊號的函式再繼續往下執行,這其實就相當於微控制器中斷處理。
2 connect時應該注意什麼
當訊號/槽的引數是引用型別時,在連線時無需指明。connect()會忽略const和&,如下面的例子所示:
#include <QObject> class A : public QObject { Q_OBJECT public: void A(); public slots: void testSlot(const int &); signals: void testSignal(const int &); }; class A::A() { connect(this, SIGNAL(testSignal(int)), this, SLOT(testSlot(int))); // 指明引數型別int即可,忽略const和& }