Ich habe folgendes Problem: Ich möchte Daten über TCP übertragen, und schrieb eine Funktion dafür. Für eine maximale Wiederverwendbarkeit ist die Funktionsvorlage f(QPair<QString, QVariant> data)
. Der erste Wert (aka QString
) wird vom Empfänger als Zieladresse verwendet, der zweite enthält die Daten. Jetzt möchte ich einen QPair<int, int>
-Wert übertragen, aber leider kann ich keinen QPair
in einen QVariant
konvertieren. Das Optimum wäre, ein Paar int
-Werte übertragen zu können, ohne eine neue Funktion schreiben zu müssen (oder die alte zu überladen). Was ist in diesem Fall die beste Alternative für QPair
?Convert QPair zu QVariant
Antwort
Sie haben die spezielle Makro Q_DECLARE_METATYPE()
verwenden, um benutzerdefinierte Typen zur Verfügung zu QVariant
System. Please read the doc carefully zu verstehen, wie es funktioniert.
Für QPair obwohl es ganz einfach:
#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;
// ...
}
Ich habe den 'Wert
Hinweis: Diese Antwort verwendet eine andere Funktionen, um sie zu konvertieren, etwas, das Sie in Betracht ziehen können.
könnten Sie QDataStream
verwenden, um die QPair
-QByteArray
und dann wandeln sie in QVariant
serialisiert werden, und Sie können die inverse Prozess die QPair
von einem QVariant
zu bekommen.
Beispiel:
//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 :: QVariant (Qt :: GlobalColor)‘ist privat
- 2. QVariant zu QIcon/QPixmap/QImage
- 3. So überprüfen Sie QVariant vom Typ QVariant :: UserType erwartet Typ?
- 4. QVariant/ohne Vorzeichen Vergleiche
- 5. Enum-Klasse in QVariant in QSettings
- 6. QVariant von QML an C++ übergeben
- 7. convert XMLGregorianCalendar zu java.sql.Timestamp
- 8. Convert Bitmap zu Thumbnail
- 9. Convert curl zu httpGet
- 10. Convert YYYYMMDD zu DATUM
- 11. Convert QPixmap zu Numpy
- 12. Convert Abfrageergebnis zu JSON
- 13. Convert SoftwareBitmap zu WriteableBitmap
- 14. Convert VCard zu CNContact
- 15. Convert String zu LatLng
- 16. Convert NSString zu NSDictionary
- 17. Convert HtmlNode zu Xpath
- 18. Convert Sting zu Int
- 19. convert curl zu Python
- 20. Convert UIImage zu CMSampleBufferRef
- 21. Convert int zu int []
- 22. Convert Linkedlist zu ArrayList
- 23. Convert void * zu double
- 24. Convert HttpRequestMessage zu HttpRequest
- 25. Convert getdate() zu EST
- 26. Convert CGcolorRef zu UIColor
- 27. Convert MKMapRect zu CGRect
- 28. Convert ttf zu swf
- 29. Convert $ zu Numerisch
- 30. Convert Unicode zu Emoji
Sie QStringList statt QPair verwenden könnte, die beiden Zahlen zu hosten. QStringList kann in QVariant konvertiert werden. – user2672165
Ok, das ist eine einfache Lösung, ich hätte das für mich selbst wissen sollen -> Kopf -> Schreibtisch ... –
Yiiikes @ _string_ Liste für ein _integer_ Paar! – lpapp