qt信號(hào)槽機(jī)制的實(shí)現(xiàn)原理 Qt槽函數(shù)怎么傳遞參數(shù)?
Qt槽函數(shù)怎么傳遞參數(shù)?[您的問題中沒有指定參數(shù)的接收者/發(fā)送者]對(duì)于通過connect傳入的插槽功能參數(shù),您可以使用信號(hào)(信號(hào)和插槽的參數(shù)應(yīng)該一致)。對(duì)于QT自己的信號(hào),描述文檔列出了它們(參見下圖
Qt槽函數(shù)怎么傳遞參數(shù)?
[您的問題中沒有指定參數(shù)的接收者/發(fā)送者]對(duì)于通過connect傳入的插槽功能參數(shù),您可以使用信號(hào)(信號(hào)和插槽的參數(shù)應(yīng)該一致)。對(duì)于QT自己的信號(hào),描述文檔列出了它們(參見下圖)。這種信號(hào)可以用參數(shù)發(fā)送。如果信號(hào)類型不符合要求,您可以自定義信號(hào),如果答案有任何偏差,請(qǐng)?zhí)岢?/p>
直接發(fā)送qbytearray對(duì)象,而不是指針。QT的數(shù)據(jù)對(duì)象(qstring、qbytearray、container等)都是隱式共享的。復(fù)制時(shí),它們共享相同的數(shù)據(jù),而不需要深度復(fù)制。深度復(fù)制僅在寫入時(shí)觸發(fā)(任何非常量方法)。所以不用擔(dān)心用信號(hào)槽發(fā)送qbytearray。QT參數(shù)傳遞的代價(jià)接近于零。此外,如果它不是隱式共享的,則使用智能指針而不是裸指針。例如,可以使用STD::shared_uptr和qsharedpointer。順便說一句,QT程序推薦使用qtthread,它更好地支持事件系統(tǒng),開銷也很低,因?yàn)椴恍枰谒姥h(huán)中寫入線程。qtthread中的對(duì)象發(fā)送信號(hào)時(shí)隙,在接收線程中執(zhí)行時(shí)隙函數(shù),從而實(shí)現(xiàn)數(shù)據(jù)安全而不需要任何鎖。如果像這樣使用傳統(tǒng)線程,那么slot函數(shù)由發(fā)送線程在emit位置執(zhí)行。您需要處理數(shù)據(jù)安全問題并需要鎖定它。相反,它更麻煩
如果事件未啟用,它將自動(dòng)報(bào)告信息。當(dāng)系統(tǒng)程序運(yùn)行觸發(fā)該信號(hào)時(shí),它將發(fā)送該信號(hào)。但如果你沒有關(guān)聯(lián),這個(gè)信號(hào)就毫無意義。信號(hào)必須與插槽函數(shù)一起使用,而事件不能。