1. 程式人生 > >關於Qt訊號/槽的引數型別

關於Qt訊號/槽的引數型別

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和&
}