Ho il seguente problema: Voglio trasmettere i dati via TCP e ho scritto una funzione per questo. Per la massima riusabilità il modello di funzione è f(QPair<QString, QVariant> data)
. Il primo valore (alias QString
) viene utilizzato dal destinatario come indirizzo di destinazione, il secondo contiene i dati. Ora voglio trasferire un valore QPair<int, int>
, ma sfortunatamente non riesco a convertire un QPair
in un QVariant
. L'optimum sarebbe essere in grado di trasferire una coppia di valori int
senza dover scrivere una nuova funzione (o per sovraccaricare quella precedente). Qual è la migliore alternativa per QPair
in questo caso?Converti QPair in QVariant
risposta
Devi usare lo speciale macro Q_DECLARE_METATYPE()
per rendere i tipi personalizzati a disposizione del sistema QVariant
. Please read the doc carefully per capire come funziona.
Per QPair Anche se è abbastanza semplice:
#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;
// ...
}
Ho perso completamente il valore '
Nota: questa risposta utilizza un'altra funzione per convertirli, qualcosa che potresti prendere in considerazione.
Si potrebbe utilizzare QDataStream
per serializzare l'QPair
-QByteArray
e quindi convertirlo in QVariant
, ed è possibile il processo inverso per ottenere il QPair
da un QVariant
.
Esempio:
//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. Conversione di QVariant in QStringList
- 2. Lanciare un elenco come QVariant o QVariant List
- 3. QVariant to QObject *
- 4. classe enum in QVariant in QSettings
- 5. QVariant to QIcon/QPixmap/QImage
- 6. Come verificare QVariant di tipo QVariant :: UserType è un tipo previsto?
- 7. Come posso convertire QVariant in QString e viceversa in Qt?
- 8. QVariant firmato/i confronti senza segno
- 9. Convertire una QVariant di un tipo personalizzato in una QString
- 10. Come recuperare i dati da QVariant per un utente?
- 11. Come posso trasmettere un QVariant alla classe personalizzata?
- 12. Converti UIImage in NSData e converti in UIImage in Swift?
- 13. Converti PDF in HTML
- 14. Converti CSS in HTML
- 15. Converti array in JSON
- 16. Converti XmlNodeList in XmlNode []
- 17. Converti audio in testo
- 18. Converti UIImage in CVPixelBufferRef
- 19. Converti System.Windows.Media.Brush in System.Drawing.Brush
- 20. Converti cvs in mercurial
- 21. Converti xml_nodeset in data.frame
- 22. Converti unicode in emoji
- 23. Converti DateTime in Double
- 24. Converti JsDefined in stringa
- 25. Converti mm in pixel
- 26. Converti NSMutableAttributedString in NSString
- 27. Converti righe in colonne
- 28. Converti IFile in file
- 29. Converti AsyncTask in RxAndroid
- 30. Converti array in JSON
Si potrebbe utilizzare QStringList invece di QPair per ospitare i due numeri interi. QStringList può essere convertito in QVariant. – user2672165
Ok, questa è una soluzione semplice, avrei dovuto saperlo da solo -> head -> desk ... –
Yiiikes @ _string_ list per una coppia _integer_! – lpapp