QT訊號槽傳遞引數技巧

2021-08-06 06:28:47 字數 1843 閱讀 7238

訊號槽如何傳遞引數(或帶引數的訊號槽)

利用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...