كيفية تحويل QString إلى Std :: String؟
-
26-09-2019 - |
سؤال
أحاول أن أفعل شيئًا كهذا:
QString string;
// do things...
std::cout << string << std::endl;
لكن الكود لا يجمع. كيفية إخراج محتوى QString في وحدة التحكم (على سبيل المثال لأغراض تصحيح الأخطاء أو أسباب أخرى)؟ كيفية تحويل QString
ل std::string
?
المحلول
أحد الأشياء التي يجب أن تتذكرها عند التحويل QString
ل std::string
هي حقيقة أن QString
هو UTF-16 مشفرة بينما std::string
... قد يكون لها أي ترميزات.
لذلك سيكون الأفضل أيضًا:
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();
قد تعمل الطريقة المقترحة (المقبولة) إذا قمت بتحديد برنامج الترميز.
نصائح أخرى
يمكنك استخدام:
QString qs;
// do things
std::cout << qs.toStdString() << std::endl;
هنا الوثائق المرجعية ل QString
.
إذا كان هدفك النهائي هو الحصول على رسائل تصحيح الأخطاء إلى وحدة التحكم ، فيمكنك استخدامها qdebug ().
يمكنك استخدام مثل ،
qDebug()<<string;
التي ستطبع المحتويات إلى وحدة التحكم.
بهذه الطريقة أفضل من تحويلها إلى std::string
فقط من أجل رسائل تصحيح الأخطاء.
QString qstr;
std::string str = qstr.toStdString();
ومع ذلك ، إذا كنت تستخدم QT:
QTextStream out(stdout);
out << qstr;
أفضل شيء يجب القيام به هو أن يكون المشغل الزائد << نفسك ، بحيث يمكن تمرير QString كنوع إلى أي مكتبة تتوقع نوعًا قادرًا على الإخراج.
std::ostream& operator<<(std::ostream& str, const QString& string) {
return str << string.toStdString();
}
بديل عن المقترح:
QString qs;
std::string current_locale_text = qs.toLocal8Bit().constData();
ممكن ان يكون:
QString qs;
std::string current_locale_text = qPrintable(qs);
يرى وثائق QPRINTABLE, ، ماكرو يقدم const char * من Qtglobal.
أبسط طريقة QString::toStdString()
.
يمكنك استخدام هذا؛
QString data;
data.toStdString().c_str();
QString data;
data.toStdString().c_str();
يمكن حتى إلقاء استثناء على برنامج التحويل البرمجي VS2017 في XString
~basic_string() _NOEXCEPT
{ // destroy the string
_Tidy_deallocate();
}
الطريقة الصحيحة (آمنة - لا استثناء) هي كيف يتم شرحه أعلاه من 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();
جرب هذا:
#include <QDebug>
QString string;
// do things...
qDebug() << "right" << string << std::endl;