我有以下問題:我想通過TCP傳輸數據,併爲此寫了一個函數。爲了獲得最大的可重用性,函數模板是f(QPair<QString, QVariant> data)
。第一個值(又名QString
)被接收方用作目標地址,第二個值包含數據。現在我想轉移QPair<int, int>
值,但不幸的是我無法將QPair
轉換爲QVariant
。最佳的做法是能夠傳輸一對int
-值而不必編寫新的函數(或重載舊函數)。在這種情況下,QPair
的最佳選擇是什麼?將QPair轉換成QVariant
5
A
回答
12
您必須使用特殊的宏Q_DECLARE_METATYPE()
,使自定義類型可供QVariant
系統。 Please read the doc carefully瞭解它是如何工作的。
對於QPair雖然這是相當簡單:
#include <QPair>
#include <QDebug>
typedef QPair<int,int> MyType; // typedef for your type
Q_DECLARE_METATYPE(MyType); // makes your type available to QMetaType system
int main(int argc, char *argv[])
{
// ...
MyType pair_in(1,2);
QVariant variant = QVariant::fromValue(pair_in);
MyType pair_out = variant.value<MyType>();
qDebug() << pair_out;
// ...
}
+0
我完全錯過了'QVariant'的文檔中的'value
2
注意:這個答案使用其他函數來轉換它們,你可能會考慮。
你可以使用QDataStream
序列化QPair
到QByteArray
,然後將其轉換爲QVariant
,並且可以逆過程從QVariant
得到QPair
。
例子:
//Convert the QPair to QByteArray first and then
//convert it to QVariant
QVariant tovariant(const QPair<int, int> &value)
{
QByteArray ba;
QDataStream stream(&ba, QIODevice::WriteOnly);
stream << value;
return QVariant(ba);
}
//Convert the QVariant to QByteArray first and then
//convert it to QPair
QPair<int, int> topair(const QVariant &value)
{
QPair<int, int> pair;
QByteArray ba = value.toByteArray();
QDataStream stream(&ba, QIODevice::ReadOnly);
stream >> pair;
return pair;
}
相關問題
- 1. 如何從QVariant檢索QPair?
- 2. QVariant轉換爲QPainterPath
- 3. 將QVariant轉換爲浮點數
- 4. 無法檢查值爲()的QVariant轉換
- 5. 轉換的QVariant回字典在Python
- 6. 的QVariant轉換爲基類型
- 7. QPair初始化
- 8. 將QVariant中的枚舉轉換爲整數
- 9. 將T的集合轉換爲Qt中的QVariant的集合
- 10. Qt:將數字轉換爲QString,QVariant或QString更好:編號
- 11. 如何將QVariant轉換爲自定義類?
- 12. BlackBerry10級聯:如何將QObject轉換爲QVariant?
- 13. 如何將QVariant轉換爲原生QtScriptValue(數字,字符串等)
- 14. 我可以方便地將QVariant轉換回QList <MyType>?
- 15. 如何在Qt中將QVariant轉換爲QString,反之亦然?
- 16. 如何將自定義對象轉換爲QVariant
- 17. 如何將QVariant轉換爲自定義類?
- 18. 無法從QCombobox檢索值 - 將QVariant轉換爲const指針
- 19. 用於將QVariant轉換爲{自定義類型的C++函數指針
- 20. Lua:將PCRE轉換成Lua
- 21. 將Pojo轉換成Gson
- 22. 將CodeSkulptor轉換成PyCharm
- 23. 將JSON轉換成模
- 24. 將char轉換成日期
- 25. 將#&#038轉換成&符號
- 26. Magick.Net將ai轉換成png
- 27. 將英文轉換成MorseCode
- 28. 將lambda轉換成方法
- 29. 將代碼轉換成類
- 30. 將多列轉換成行
你可以使用QStringList中,而不是QPair舉辦兩個整數。 QStringList可以轉換爲QVariant。 – user2672165 2014-12-13 17:26:39
好的,這是一個簡單的解決方案,我應該知道,對於我自己 - > head - > desk ... – 2014-12-13 17:28:32
Yiiikes @ _string_ list for a _integer_ pair! – lpapp 2014-12-14 06:53:08