Qual è il modo più semplice per farlo?Come cambiare stringa in QString?
risposta
Se da stringa si intende std::string
si può fare con questo metodo:
QString QString::fromStdString(const std::string & str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
Se da stringa si intende Ascii codificato const char *
quindi è possibile utilizzare questo metodo:
QString QString::fromAscii(const char * str, int size = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
Se avete const char *
codificati con la codifica del sistema che possono essere letti con QTextCodec::codecForLocale() allora si dovrebbe utilizzare questo metodo:
QString QString::fromLocal8Bit(const char * str, int size = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
Se avete const char *
che è UTF-8 codificato quindi dovrai utilizzare questo metodo:
QString QString::fromUtf8(const char * str, int size = -1)
const char* str = read_raw("hello.txt"); // assuming hello.txt is UTF8 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const char*
QString qstr = QString::fromUtf8(str);
C'è anche metodo per const ushort *
contenente UTF16 stringa codificata:
QString QString::fromUtf16(const ushort * unicode, int size = -1)
const ushort* str = read_raw("hello.txt"); // assuming hello.txt is UTF16 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const ushort*
QString qstr = QString::fromUtf16(str);
std::string s = "Sambuca";
QString q = s.c_str();
Attenzione: Questo non funzionerà i f il std::string
contiene \0
s.
Non funziona con '\ 0' incorporato. –
Non è sicuro anche per Unicode. –
Si intende una stringa C, come in una stringa char*
o un oggetto C++ std::string
?
In entrambi i casi, si utilizza lo stesso costruttore, come documentato nel riferimento QT:
Per una stringa regolare C, basta utilizzare il costruttore principale:
char name[] = "Stack Overflow";
QString qname(name);
Per un std::string
, si ottiene il char*
nel buffer e lo si passa allo QString
costruttore:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
L'esempio 'std :: string' non funziona con' \ 0' incorporato. –
È vero, anche se l'OP non ha menzionato NULL incorporati. Se è necessario, è possibile utilizzare 'QByteArray :: QByteArray (const char * data, int size)' per impacchettare prima il buffer, quindi passarlo al costruttore 'QString'. – gavinb
Se compilato con compatibilità STL, QString
ha un static method per convertire un std::string
ad un QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
Questa dovrebbe essere la risposta accettata. –
Questo dovrebbe essere evitato a mio avviso. Se la versione della libreria standard QT è stata compilata in qualche modo diversa da quella che stai compilando, avrai dei problemi. In crea una dipendenza non necessaria tra QT e libstdC++ che non esiste da nessun'altra parte in QT. – shoosh
@shoosh: Per evitare che non si possa semplicemente fare 'QString qstr = QString (str.c_str());'? Non sono sicuro che 'QString' copi ciò che è passato in esso. – Claudiu
modo alternativo:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
Questo ha il vantaggio di non usando .c_str()
che potrebbe causare il std::string
a c opy stesso nel caso in cui non ci sia posto per aggiungere il '\0'
alla fine.
Grazie per l'indicazione sulla potenziale copia nascosta con .c_str(). – Trass3r
Con C++ 11, questo non è più un problema (copia nascosta con '.c_str()') –
Prima di C++ 11, la potenziale copia nascosta era una possibilità puramente teorica - nessuna implementazione lo ha effettivamente fatto. –
Mi sono imbattuto in questa domanda perché ho avuto un problema nel seguire le risposte, quindi inserisco qui la mia soluzione.
Gli esempi precedenti mostrano tutti gli esempi con stringhe contenenti solo valori ASCII, nel qual caso tutto funziona correttamente. Tuttavia, quando si tratta di stringhe in Windows pagherei possono contenere anche altri personaggi, come la dieresi tedesco, allora queste soluzioni non funzionano
L'unico codice che dà risultati corretti in questi casi è
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
Se non devono occuparsi di tali stringhe, quindi le risposte sopra funzioneranno bene.
Inoltre, per convertire tutto ciò che si desidera, è possibile utilizzare la classe QVariant.
ad esempio:
std::string str("hello !");
qDebug() << QVariant(str.c_str()).toString();
int test = 10;
double titi = 5.42;
qDebug() << QVariant(test).toString();
qDebug() << QVariant(titi).toString();
qDebug() << QVariant(titi).toInt();
uscita
"hello !"
"10"
"5.42"
5
- 1. Come formattare un QString?
- 2. QString Splitting
- 3. Come convertire enum in QString?
- 4. Come convertire QString in int?
- 5. Come creare QString in PyQt4?
- 6. Come inizializzare QJsonObject da QString
- 7. Come cambiare una stringa in maiuscolo
- 8. Conversione QString in char *
- 9. Converti bool in QString
- 10. Come convertire un QJsonObject in QString
- 11. Come convertire QString in std :: string?
- 12. Come visualizzare tutta QString durante il debug
- 13. Qt: Converti QString in esadecimale
- 14. Ottieni QString in byte (non caratteri)
- 15. Come sostituire '/' con '\\' usando QString replace()?
- 16. Qt. ottenere parte di QString
- 17. Come restituire un riferimento const QString in caso di errore?
- 18. C++ Qt return empty QString
- 19. errore LNK2001: simbolo esterno non risolto "__declspec (dllimport) public: class QString & __thiscall QString :: operator = (classe QString &&)"
- 20. Come convertire un valore del puntatore in QString?
- 21. Converti qint64 a QString
- 22. Converti WCHAR in QString in Qt
- 23. Risoluzione QTs QString arg() ambiguità
- 24. Come posso convertire QVariant in QString e viceversa in Qt?
- 25. Come convertire QString in QDate in un formato specifico?
- 26. Come creare una QString da un QTextStream?
- 27. come inizializzare un QString su null?
- 28. Convertire una QVariant di un tipo personalizzato in una QString
- 29. La stringa non può cambiare. Ma int, char può cambiare
- 30. Stampa di zero finali in una QString
Non si vuole per costruire il QString con 'nuova'. – rohanpm
@Rohan - Grazie per il tuo commento. Sto rimuovendo questo dalla mia risposta. –
Non risponde alla domanda. – CCoder