Qt 信號槽傳參


利用Qt進行程序開發時,有時需要信號槽來完成參數傳遞。帶參數的信號槽在使用時,有幾點需要注意的地方。

第一點:當信號與槽函數的參數數量相同時,它們參數類型要完全一致。

第二點:當信號的參數與槽函數的參數數量不同時。

1:當我們的槽函數參數比信號的參數多時,將會出現QObject::connect: Incompatible sender/receiver arguments錯誤。

2:當槽函數參數比信號參數少時,而且前面的參數類型一致時,從左往右數多出來的參數將會被忽視。

例如有信號

void signal_fun(int i,string s);

有槽函數

void slot_fun(int i,string s)
{
    qDebug()<<"槽函數收到的參數為:"<<i<<s;
}

鏈接起來

connect(this,SIGNAL(signal_fun(int,string)),this,SLOT(slot_fun(int,string)));

輸入代碼

emit signal_fun(123,"hello");

那么則會有輸出信息:槽函數收到的參數為123 hello。

除了傳遞實參,還可以用來傳遞形參:例如

void fun(int a,string str)
{
    emit signal_fun(a,str);
}

輸出的結果就是a和str所代表的參數值。

6.29補充:

槽函數和對應信號的connect應該放在這個對象被創建的文件中,而不是這個對象自身的源文件中

例如:有一個類A和他的槽函數slotA(),在另一個文件B中被創建,則他的connec應該寫在B的源文件中。

class A
{
    private slots:
        void slotA();
}
B.cpp

void fun()
{
    A a;//創建一個A的具體對象
    connect(this,SIGNAL(signal()),a,SLOT(slotA()));//不一定要寫在這個位置,但是一定要是在這個文件夾中,且connect的時間要在對象被創建之后
}

這樣才能生效,因為今天晚上在應用到友元類的時候發現將connect寫到A.cpp中的時候,槽函數不會被觸發,特此將問題記錄下來。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM