QT信號和槽參數傳遞複雜結構(多種類型適配)的數據

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

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

1、首先包含頭文件:#include , 在使用信號類(或主窗口類)的構造函數中,通過如下的方式註冊數據類型:qRegisterMetaType(“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>>();//還原爲原來的數據結構類型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章