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>>();//還原為原來的數據結構類型