QT信號和槽參數傳遞復雜結構的數據


https://blog.csdn.net/cLover_xiaolei/article/details/79017832

QT信號和槽函數間參數傳遞只能是通用數據類型,有時信號和槽函數間需要傳遞map等結構復雜的數據。實現復雜結構數據傳遞的主體思路是:將復雜結構的數據包裝成通用數據類型(QVariant)放入信號及槽函數中傳遞,在槽函數中使用時再轉化為原來的數據類型。

本次以傳遞參數類型:QMap<QString, int>為例。

1、首先包含頭文件:#include <QMetaType>, 在使用信號類(或主窗口類)的構造函數中,通過如下的方式注冊數據類型:qRegisterMetaType<QVariant>("QVariant");

2、然后分別申明信號和槽函數,並建立連接:

創建信號:signals: void showMsgBox(QVariant, const QString &);

創建槽:private slots: void sMsgBox(QVariant, const QString &);

建立信號和槽連接:connect(this, SIGNAL(void showMsgBox(QVariant, const QString &)), this, SLOT(sMsgBox(QVariant, const QString &)), Qt::QueuedConnection);

3、在信號發生處采用如下的方式進行數據包裝:

QMap<QString, int>allBackCode = thread->getAllBaceCode();//需要傳遞的數據,此處從線程中獲取map數據獲取(略)

QVariant DataVar; //申明通用數據對象

DataVar.setValue(allBackCode); //數據包裝

emit showMsgBox(DataVar, sheetName); //發送信號(其中sheetName為QString類型)

4、在槽函數中進行數據還原:

QMap<QString, int>mapBackCode = DataVar.value<QMap<QString, int>>();//還原為原來的數據結構類型

 


免責聲明!

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



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