簡體   English   中英

將QPair轉換為QVariant

[英]Convert QPair to QVariant

我有以下問題:我想通過TCP傳輸數據,並為此編寫了一個函數。 為了獲得最大的可重用性,函數模板為f(QPair<QString, QVariant> data) 第一個值(aka QString )由接收器用作目標地址,第二個值包含數據。 現在我想轉移一個QPair<int, int> ,但遺憾的是我無法將QPair轉換為QVariant 最佳的方法是能夠傳輸一對int而無需編寫新函數(或使舊函數重載)。 在這種情況下, QPair的最佳替代方案是什么?

您必須使用特殊宏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;

    // ...
}

注意:這個答案使用其他函數來轉換它們,您可以考慮使用它。

您可以使用QDataStreamQPair序列化為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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM