将QPair转换为QVariant

arc*_*pus 9 c++ qt tcp qvariant

我有以下问题:我想通过TCP传输数据,并为此编写了一个函数.为了获得最大的可重用性,函数模板是f(QPair<QString, QVariant> data).第一个值(aka QString)由接收器用作目标地址,第二个值包含数据.现在我想转移一个QPair<int, int>-value,但不幸的是我无法将a转换QPair为a QVariant.最佳的方法是能够传输一对值int而无需编写新函数(或使旧函数过载).QPair在这种情况下,最好的选择是什么?

azf*_*azf 20

您必须使用特殊宏Q_DECLARE_METATYPE()来使QVariant系统可以使用自定义类型. 请仔细阅读文档以了解其工作原理.

对于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;

    // ...
}
Run Code Online (Sandbox Code Playgroud)