উত্তর:
যদি স্ট্রিং দিয়ে আপনি বোঝাতে চান std::string
আপনি এই পদ্ধতিটি দিয়ে এটি করতে পারেন:
কিউস্ট্রিং কিউস্ট্রিং :: থেকে স্টেডস্ট্রিং (কনস্ট স্ট্যান্ড :: স্ট্রিং এবং স্ট্রিং)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
যদি স্ট্রিং দ্বারা আপনি বোঝাচ্ছেন আসকি এনকোডড থাকে const char *
তবে আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন:
কিউস্ট্রিং কিস্টস্ট্রিং :: থেকে এসকিই (কনস্ট চর * টিআর, ইনট আকার = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
আপনি যদি const char *
সিস্টেম এনকোডিংয়ের সাথে এনকোড করেছেন যা QTextCodec :: কোডেকফোর্ডলোক () দিয়ে পড়া যায় তবে আপনার এই পদ্ধতিটি ব্যবহার করা উচিত:
কিউস্ট্রিং কিউস্ট্রিং :: থেকে লোকাল 8 বিট (কনস্ট চর * টিআর, ইনট আকার = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
আপনার যদি const char *
ইউটিএফ 8 এনকোডড থাকে তবে আপনাকে এই পদ্ধতিটি ব্যবহার করতে হবে:
কিউস্ট্রিং কিস্টস্ট্রিং :: থেকে ইউটিএফ 8 (কনস্ট চর * টিআর, ইনট আকার = -1)
const char* str = read_raw("hello.txt"); // assuming hello.txt is UTF8 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const char*
QString qstr = QString::fromUtf8(str);
const ushort *
ইউটিএফ 16 এনকোডযুক্ত স্ট্রিং রয়েছে এমন পদ্ধতি রয়েছে :
কিউস্ট্রিং কিস্টস্ট্রিং :: থেকে ইউটিএফ 16 (কনস্ট ইউএসোর্ট * ইউনিকোড, ইনট আকার = -1)
const ushort* str = read_raw("hello.txt"); // assuming hello.txt is UTF16 encoded, and read_raw() reads bytes from file into memory and returns pointer to the first byte as const ushort*
QString qstr = QString::fromUtf16(str);
তাহলে STL এর সঙ্গে সামঞ্জস্যপূর্ণ সংকলন QString
টি স্ট্যাটিক পদ্ধতি একটি রূপান্তর করতে std::string
একটি থেকে QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
? QString
এটি কী কপি করেছে তা নিশ্চিত নয়।
fromStdString
এগুলি সংরক্ষণ .c_str
করবে, না থেকে নির্মাণ করবে। (এবং এটি কীভাবে করা উচিত তা আমাকে এই প্রশ্নের দিকে নিয়ে গিয়েছিল তা অবিকল ছিল was)
বিকল্প উপায়:
std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());
এটি ব্যবহার না করার সুবিধা রয়েছে .c_str()
যা শেষদিকে std::string
যুক্ত করার '\0'
মতো জায়গা না থাকলে নিজের কপিটি তৈরি করতে পারে ।
.c_str()
)
std::string s = "Sambuca";
QString q = s.c_str();
সতর্কতা: যদি এতে std::string
থাকে তবে এটি কাজ করবে না \0
।
আমি এই প্রশ্নটি জুড়ে এসেছি কারণ উত্তরগুলি অনুসরণ করার সময় আমার একটি সমস্যা হয়েছিল, তাই আমি আমার সমাধানটি এখানে পোস্ট করি।
উপরের উদাহরণগুলিতে সমস্তগুলি কেবলমাত্র ASCII মানযুক্ত স্ট্রিং সহ নমুনাগুলি দেখায়, এই ক্ষেত্রে সবকিছু ঠিকঠাক কাজ করে। তবে উইন্ডোজের স্ট্রিংয়ের সাথে যখন জার্মান উমলাটদের মতো অন্যান্য অক্ষরও থাকতে পারে তবে এই সমাধানগুলি কার্যকর হয় না
এই জাতীয় ক্ষেত্রে সঠিক ফলাফল দেয় এমন একমাত্র কোডটি
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
আপনার যদি এই জাতীয় স্ট্রিংগুলির সাথে ডিল করতে না হয় তবে উপরের উত্তরগুলি ভাল কাজ করবে।
fromLocal8Bit()
তদতিরিক্ত, আপনি যা চান রূপান্তর করতে, আপনি কিউভারিয়েন্ট বর্গ ব্যবহার করতে পারেন।
উদাহরণ স্বরূপ:
std::string str("hello !");
qDebug() << QVariant(str.c_str()).toString();
int test = 10;
double titi = 5.42;
qDebug() << QVariant(test).toString();
qDebug() << QVariant(titi).toString();
qDebug() << QVariant(titi).toInt();
আউটপুট
"hello !"
"10"
"5.42"
5
আপনার অর্থ কি কোনও স্ট্রিং, যেমন একটি char*
স্ট্রিং, বা একটি সি ++ std::string
অবজেক্ট?
যে কোনও উপায়ে, আপনি QT রেফারেন্সে নথিবদ্ধ হিসাবে একই নির্মাতা ব্যবহার করুন:
একটি নিয়মিত সি স্ট্রিংয়ের জন্য, কেবলমাত্র প্রধান নির্মাতা ব্যবহার করুন:
char name[] = "Stack Overflow";
QString qname(name);
একটির জন্য std::string
, আপনি char*
বাফারটি পাবেন এবং এটি QString
কনস্ট্রাক্টরকে দিন:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
QByteArray::QByteArray (const char* data, int size)
এটির প্রয়োজন হয়, আপনি প্রথমে বাফারটি মোড়ানোর জন্য ব্যবহার করতে পারেন এবং তারপরে এটি QString
কনস্ট্রাক্টরকে দিতে পারেন।