12

次の問題があります: TCP 経由でデータを送信したいので、そのための関数を書きました。再利用性を最大限に高めるために、関数テンプレートはf(QPair<QString, QVariant> data). 最初の値 (aka QString) はターゲット アドレスとして受信者によって使用され、2 番目の値にはデータが含まれます。値を転送したいのですQPair<int, int>が、残念ながら を に変換できませQPairQVariantint最適なのは、新しい関数を作成する (または古い関数をオーバーロードする) ことなく、値のペアを転送できることです。QPairこの場合の最良の代替手段は何ですか?

4

2 に答える 2

24

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;

    // ...
}
于 2014-12-13T19:50:29.683 に答える