J'essaie de faire quelque chose comme ça:
QString string;
// do things...
std::cout << string << std::endl;
mais le code ne compile pas. Comment sortir le contenu de qstring dans la console (par exemple à des fins de débogage ou pour d'autres raisons)? Comment convertir QString
à std::string
?
c++
qt
type-conversion
qstring
augustin
la source
la source
static inline std::string toUtf8(const QString& s) { QByteArray sUtf8 = s.toUtf8(); return std::string(sUtf8.constData(), sUtf8.size()); }
std::string utf8_text = qs.toUtf8().constData();
Donc votre déclaration n'est pas correcteQString s = QString::fromUtf8("árvíztűrő tükörfúrógép ÁRVÍZTŰRŐ TÜKÖRFÚRÓGÉP"); std::cout << s.toStdString() << std::endl; std::cout << s.toUtf8().constData() << std::endl;
. Le premier est incorrect, le second est parfait. Vous avez besoin d'un terminal utf8 pour tester cela..toStdString()
pour moi, il y a toujours une violation d'accès chez l'opérateur de pipe, quel que soit leQString
contenu de (non-latin1 ou non). C'est sur Qt 4.8.3 / MSVC ++ 10 / Win 7.Vous pouvez utiliser:
Il utilise en interne la fonction QString :: toUtf8 () pour créer std :: string, il est donc également sûr pour Unicode. Voici la documentation de référence pour
QString
.la source
QString::toStdString()
utilise maintenantQString::toUtf8()
pour effectuer la conversion, donc les propriétés Unicode de la chaîne ne seront pas perdues ( qt-project.org/doc/qt-5.0/qtcore/qstring.html#toStdString ).QString::toStdString
, le voici .Si votre but ultime est d'obtenir des messages de débogage sur la console, vous pouvez utiliser qDebug () .
Vous pouvez utiliser comme,
qDebug()<<string;
qui imprimera le contenu sur la console .Cette méthode est meilleure que de la convertir
std::string
uniquement pour le débogage des messages.la source
Cependant, si vous utilisez Qt:
la source
La meilleure chose à faire serait de surcharger l'opérateur << vous-même, afin que QString puisse être passé en tant que type à n'importe quelle bibliothèque attendant un type capable de sortie.
la source
Une alternative à la proposition:
pourrait être:
Voir la documentation qPrintable , une macro fournissant un caractère const * de QtGlobal.
la source
-no-stl
-Option. plus d'infosLa manière la plus simple serait
QString::toStdString()
.la source
Vous pouvez l'utiliser;
la source
pourrait même lever l'exception sur le compilateur VS2017 dans xstring
la bonne façon (sécurisé - sans exception) est comment expliqué ci-dessus d'Artyom
la source
Essaye ça:
la source