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