我有以下问题:我想通过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转换为浮点数
- 2. 如何在Qt中将QVariant转换为QString,反之亦然?
- 3. 如何将QVariant转换为原生QtScriptValue(数字,字符串等)
- 4. 我可以方便地将QVariant转换回QList <MyType>?
- 5. 无法从QCombobox检索值 - 将QVariant转换为const指针
- 6. 如何将QVariant转换为自定义类?
- 7. 将T的集合转换为Qt中的QVariant的集合
- 8. QPair初始化
- 9. 将Fecha转换成日历
- 10. 将代码转换成类
- 11. 将px转换成度
- 12. 将数组转换成表
- 13. 将applescript转换成applescript studio
- 14. 角:将XML转换成JSON
- 15. 将JSON转换成表格
- 16. 将python转换成字典
- 17. 将char转换成日期
- 18. Ç - 将char转换成int
- 19. 将指针转换成MemoryStream?
- 20. 将HTML转换成PDF
- 21. 将CvMat 8转换成CvMat
- 22. 将gmake Makefile转换成Makefile?
- 23. jsPDF将HTML转换成PDF
- 24. Docx4j将HTML转换成DOCX
- 25. 将多列转换成行
- 26. Scala - 将TrieMap转换成HashMap
- 27. 将JSON转换成模
- 28. 将utf8转换成windows-1256
- 29. Lua:将PCRE转换成Lua
- 30. 将列表投射为QVariant或QVariant列表
你可以使用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