Come convertire QString a std :: string?
-
26-09-2019 - |
Domanda
sto cercando di fare qualcosa di simile:
QString string;
// do things...
std::cout << string << std::endl;
ma il codice non viene compilato.
Come uscita il contenuto del QString nella console (ad esempio per scopi o per altri motivi di debug)? Come convertire QString
a std::string
?
Soluzione
Una delle cose che si dovrebbero ricordare durante la conversione QString
al std::string
è il fatto che QString
è UTF-16 codificato mentre std::string
... possono avere qualsiasi codifiche.
Quindi, la migliore sarebbe essere:
QString qs;
// Either this if you use UTF-8 anywhere
std::string utf8_text = qs.toUtf8().constData();
// or this if you're on Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();
Il metodo suggerito (accettato) può funzionare se si specifica codec.
Altri suggerimenti
È possibile utilizzare:
QString qs;
// do things
std::cout << qs.toStdString() << std::endl;
Se il vostro obiettivo finale è quello di ottenere messaggi di debug alla console, è possibile utilizzare qDebug () .
È possibile utilizzare come,
qDebug()<<string;
che stampare il contenuto al console .
In questo modo è meglio di conversione in std::string
solo per il gusto di messaggi di debug.
QString qstr;
std::string str = qstr.toStdString();
Tuttavia, se si sta utilizzando Qt:
QTextStream out(stdout);
out << qstr;
La cosa migliore da fare sarebbe quella di operatore di sovraccarica << te stesso, in modo che QString può essere passato come un tipo a qualsiasi libreria aspettandosi un tipo di output-grado.
std::ostream& operator<<(std::ostream& str, const QString& string) {
return str << string.toStdString();
}
Un'alternativa alla proposta:
QString qs;
std::string current_locale_text = qs.toLocal8Bit().constData();
potrebbe essere:
QString qs;
std::string current_locale_text = qPrintable(qs);
qPrintable documentazione , una macro offrendo un const char * da QtGlobal.
Il modo più semplice sarebbe QString::toStdString()
.
È possibile utilizzare questo;
QString data;
data.toStdString().c_str();
QString data;
data.toStdString().c_str();
potrebbe anche buttare eccezione su VS2017 compilatore in xstring
~basic_string() _NOEXCEPT
{ // destroy the string
_Tidy_deallocate();
}
la strada giusta (custodito - non fa eccezione) è come viene spiegato in precedenza da Artyom
QString qs;
// Either this if you use UTF-8 anywhere
std::string utf8_text = qs.toUtf8().constData();
// or this if you're on Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();
Prova questo:
#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;