উত্তর:
রূপান্তর QString
করার সময় আপনার মনে রাখা উচিত যেগুলিগুলির std::string
মধ্যে একটি QString
হ'ল ইউটিএফ -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();
আপনি কোডেক নির্দিষ্ট করে দিলে প্রস্তাবিত (স্বীকৃত) পদ্ধতি কাজ করতে পারে।
std::string utf8_text = qs.toUtf8().constData();
তাই আপনার বক্তব্যটি সঠিক নয়
QString 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;
। প্রথমটি ভুল, দ্বিতীয়টি নিখুঁত। এটি পরীক্ষা করতে আপনার একটি utf8 টার্মিনাল প্রয়োজন।
.toStdString()
জন্য মূল্যবান, আমার পক্ষে সর্বদা পাইপ অপারেটরে অ্যাক্সেস লঙ্ঘনের ফলাফল হয়, নির্বিশেষে QString
এর লিখিত সামগ্রী (নন-ল্যাটিন 1 নয়)। এটি Qt 4.8.3 / MSVC ++ 10 / Win 7. এ রয়েছে
তুমি ব্যবহার করতে পার:
QString qs;
// do things
std::cout << qs.toStdString() << std::endl;
এটি অভ্যন্তরীণভাবে স্ট্র্যাড :: স্ট্রিং তৈরি করতে QString :: toUtf8 () ফাংশন ব্যবহার করে, তাই এটি ইউনিকোডও নিরাপদ। এখানে রেফারেন্স ডকুমেন্টেশন QString
।
QString::toStdString()
এখন QString::toUtf8()
রূপান্তর সম্পাদন করতে ব্যবহৃত হয়, সুতরাং স্ট্রিংয়ের ইউনিকোড বৈশিষ্ট্যগুলি হারাবে না ( qt-project.org/doc/qt-5.0/qtcore/qstring.html#toStdString )।
যদি আপনার চূড়ান্ত লক্ষ্য কনসোলে ডিবাগিং বার্তাগুলি পাওয়া যায়, আপনি qDebug () ব্যবহার করতে পারেন ।
আপনি যেমন ব্যবহার করতে পারেন,
qDebug()<<string;
যা কনসোলে সামগ্রীগুলি মুদ্রণ করবে ।
এই উপায়টিকে std::string
কেবল ডিবাগিং বার্তাগুলির জন্য রূপান্তর করার চেয়ে ভাল ।
QString qstr;
std::string str = qstr.toStdString();
তবে, আপনি যদি Qt ব্যবহার করছেন:
QTextStream out(stdout);
out << qstr;
সর্বোত্তম জিনিসটি হ'ল ওভারলোড অপারেটর << নিজেই, যাতে কিউ স্ট্রিং কোনও আউটপুট-সক্ষম টাইপ আশা করে যে কোনও লাইব্রেরিতে প্রকার হিসাবে পাস করতে পারে।
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);
কিউটি মুদ্রণযোগ্য ডকুমেন্টেশন দেখুন, কিউটিগ্লোবাল থেকে কনস্ট চর সরবরাহকারী একটি ম্যাক্রো।
-no-stl
অপশন সেট সহ কিউটি-বিল্ড দিয়েও কাজ করে। আরও কিছু তথ্য
আপনি এটি ব্যবহার করতে পারেন;
QString data;
data.toStdString().c_str();
QString data;
data.toStdString().c_str();
~basic_string() _NOEXCEPT
{ // destroy the string
_Tidy_deallocate();
}
আরটিম থেকে উপরে কীভাবে ব্যাখ্যা করা হয়েছে তা সঠিক উপায় (সুরক্ষিত - কোনও ব্যতিক্রম নয়)
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;
static inline std::string toUtf8(const QString& s) { QByteArray sUtf8 = s.toUtf8(); return std::string(sUtf8.constData(), sUtf8.size()); }