訊號槽如何傳遞引數(或帶引數的訊號槽)
利用qt進行程式開發時,有時需要訊號槽來完成引數傳遞。帶引數的訊號槽在使用時,有幾點需要注意的地方,下面結合例項進行介紹。
第一點:當訊號與槽函式的引數數量相同時,它們引數型別要完全一致。
訊號:[cpp]view plain
void
isignal(
intb); 槽:
[cpp]view plain
void
mainwindow::islot(
intb)
訊號槽繫結:
[cpp]view plain
connect(
this
, signal(isignal(
int)),
this
, slot(islot(
int)));
傳送訊號:
[cpp]view plain
emit isignal(5);
結果:
可以看出,引數已經成功傳遞。
第二點:當訊號的引數與槽函式的引數數量不同時,只能是訊號的引數數量多於槽函式的引數數量,且前面相同數量的引數型別應一致,訊號中多餘的引數會被忽略。
訊號:[html]view plain
void isignal(int a, float b); 槽:
[html]view plain
void mainwindow::islot(int b)
訊號槽:
[html]view plain
connect(this, signal(isignal(int, float)), this, slot(islot(int)));
傳送訊號:
[html]view plain
emit isignal(5, 0.3);
結果:
此外,在不進行引數傳遞時,訊號槽繫結時也是要求訊號的引數數量大於等於槽函式的引數數量。這種情況一般是乙個帶引數的訊號去繫結乙個無引數的槽函式。如下例所示。
訊號:[cpp]view plain
void
isignal(
inta,
float
b);
槽函式:
[cpp]view plain
void
mainwindow::islot()
//int b
訊號槽:
[html]view plain
connect(this, signal(isignal(int, float)), this, slot(islot()));
傳送訊號:
[html]view plain
emit isignal(5, 0.3);
結果:
Qt 訊號槽傳遞結構體引數
1 需要註冊結構體引數,在結構體中宣告結束的地方加上結構體註冊。typedef struct s exceptionnotifydata exceptionnotifydata q declare metatype exceptionnotifydata 2 訊號定義 signals void si...
Qt槽和訊號引數
qt的訊號只需要申明。不需要定義 signals void signala int a qt的槽和普通的成員函式是一樣的,可以加上public potected 以及virtual等標記 public void slota int a 把這兩個用connect連線起來,這裡的signal signa...
QT的訊號槽值傳遞
c 的rtti提供執行時的型別資訊,qt使用元物件來提供更加強大的內省功能,能在執行時獲取物件的屬性和方法。qt 的訊號看起來像是乙個只有宣告沒有定義的函式,在訊號發射時,會發生拷貝過程 如果訊號有和槽函式繫結,那麼訊號的引數再傳遞給槽函式,又會發生乙個拷貝過程。class myclass mycl...