Saya mencoba melakukan sesuatu seperti ini:
QString string;
// do things...
std::cout << string << std::endl;
tetapi kode tidak dikompilasi. Bagaimana cara mengeluarkan konten qstring ke konsol (misalnya untuk tujuan debugging atau alasan lain)? Bagaimana mengkonversi QString
ke std::string
?
c++
qt
type-conversion
qstring
augustin
sumber
sumber
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();
Jadi pernyataan Anda tidak benarQString 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;
. Yang pertama salah, yang kedua sempurna. Anda memerlukan terminal utf8 untuk menguji ini..toStdString()
bagi saya selalu menghasilkan pelanggaran akses di operator pipa, terlepas dariQString
isinya (non-latin1 atau tidak). Ini pada Qt 4.8.3 / MSVC ++ 10 / Win 7.Kamu bisa memakai:
Ini secara internal menggunakan fungsi QString :: toUtf8 () untuk membuat std :: string, jadi Unicode aman juga. Inilah dokumentasi referensi untuk
QString
.sumber
QString::toStdString()
sekarang digunakanQString::toUtf8()
untuk melakukan konversi, sehingga properti Unicode dari string tidak akan hilang ( qt-project.org/doc/qt-5.0/qtcore/qstring.html#toStdString ).QString::toStdString
, ini dia .Jika tujuan utama Anda adalah untuk mendapatkan pesan debug ke konsol, Anda dapat menggunakan qDebug () .
Anda bisa menggunakan like,
qDebug()<<string;
yang akan mencetak konten ke konsol .Cara ini lebih baik daripada mengubahnya menjadi
std::string
hanya demi debugging pesan.sumber
Namun, jika Anda menggunakan Qt:
sumber
Hal terbaik untuk dilakukan adalah membebani operator << diri Anda sendiri, sehingga QString dapat diteruskan sebagai tipe ke pustaka mana pun yang mengharapkan tipe yang dapat menghasilkan.
sumber
Alternatif untuk yang diusulkan:
bisa jadi:
Lihat dokumentasi qPrintable , makro yang memberikan konstitusi * dari QtGlobal.
sumber
-no-stl
set Qt-Build with -Opsi. beberapa info lebih lanjutCara paling sederhana adalah
QString::toStdString()
.sumber
Anda bisa menggunakan ini;
sumber
bahkan bisa melempar pengecualian pada kompiler VS2017 di xstring
cara yang benar (aman - tidak terkecuali) adalah bagaimana dijelaskan di atas dari Artyom
sumber
Coba ini:
sumber