স্ট্রিং কিউ স্ট্রিংয়ে পরিবর্তন করবেন?


উত্তর:


153

যদি স্ট্রিং দিয়ে আপনি বোঝাতে চান 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);

1
আপনি 'নতুন' দিয়ে কিউস্ট্রিংটি নির্মাণ করতে চাইবেন না।
রোহন পিএম

@ রোহান - আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ। আমি আমার উত্তর থেকে এটি অপসারণ করছি।
কামিল জাজট

এটি প্রশ্নের উত্তর দেয় না।
সিসি কোডার

1
আমি এতগুলি ডাউনভোটের সাথে গ্রহণযোগ্য উত্তর কখনও দেখিনি। কেন লেখক সর্বোচ্চ ভোট প্রাপ্ত উত্তরের চেয়ে ভাল কিছুতে এটি সম্পাদনা করতে পারে না? আরও বিশদ যুক্ত করতে চান? ততক্ষণে, আরও একটি -1 উপভোগ করুন।
টোমা জ্যাটো - মনিকা

3
দেখে মনে হচ্ছে এটি এখনই স্থির হয়ে গেছে, এবং বেশ ভাল, তাই আমি এই এবং অন্যটি দুটিই দিয়েছি।
সিএসএল

242

তাহলে STL এর সঙ্গে সামঞ্জস্যপূর্ণ সংকলন QStringটি স্ট্যাটিক পদ্ধতি একটি রূপান্তর করতে std::stringএকটি থেকে QString:

std::string str = "abc";
QString qstr = QString::fromStdString(str);

3
এটি আসলে আমার মতে এড়ানো উচিত। স্ট্যান্ডার্ড লাইব্রেরি কিউটি-র সংস্করণটি যদি আপনি সংকলন করছেন তার থেকে কিছুটা আলাদা হয় তবে আপনার সমস্যা হতে চলেছে। QT এবং libstdc ++ এর মধ্যে অপ্রয়োজনীয় নির্ভরতা তৈরি করে যা QT- তে অন্য কোথাও নেই।
shoosh

@ শুশ: এড়াতে কেউ কি করতে পারে না QString qstr = QString(str.c_str());? QStringএটি কী কপি করেছে তা নিশ্চিত নয়।
ক্লাদিউ

@ শুশ: আমি সামঞ্জস্যতা সম্পর্কে আপনার উদ্বেগগুলি বুঝতে পারি, তবে কিউ স্ট্রিং এবং স্টাডি :: স্ট্রিংয়ে নাল অক্ষর থাকতে পারে। fromStdStringএগুলি সংরক্ষণ .c_strকরবে, না থেকে নির্মাণ করবে। (এবং এটি কীভাবে করা উচিত তা আমাকে এই প্রশ্নের দিকে নিয়ে গিয়েছিল তা অবিকল ছিল was)
মার্টিন বোনার

@ মার্টিনবোনার কিউবাইটআর্রে একটি কর্ট রয়েছে যা কনস্ট চর এবং দৈর্ঘ্য নেয়। কিউ স্ট্রিংয়ের একটি কর্ট আছে যা কিউবাইটআরে নেয়
শুশ করুন

13

বিকল্প উপায়:

std::string s = "This is an STL string";
QString qs = QString::fromAscii(s.data(), s.size());

এটি ব্যবহার না করার সুবিধা রয়েছে .c_str()যা শেষদিকে std::stringযুক্ত করার '\0'মতো জায়গা না থাকলে নিজের কপিটি তৈরি করতে পারে ।


2
.C_str () সহ সম্ভাব্য লুকানো অনুলিপি সম্পর্কে ইঙ্গিতটির জন্য ধন্যবাদ।
Trass3r

সি ++ ১১ দিয়ে এটি আর উদ্বেগের বিষয় নয় (এর সাথে লুকানো অনুলিপি .c_str())
স্টিভ লরিমার

1
সি ++ 11 এর আগে, সম্ভাব্য লুকানো অনুলিপিটি একটি সম্পূর্ণ তাত্ত্বিক সম্ভাবনা ছিল - কোনও বাস্তবায়ন বাস্তবে এটি করে নি।
মার্টিন বোনার

11
std::string s = "Sambuca";
QString q = s.c_str();

সতর্কতা: যদি এতে std::stringথাকে তবে এটি কাজ করবে না \0


3

আমি এই প্রশ্নটি জুড়ে এসেছি কারণ উত্তরগুলি অনুসরণ করার সময় আমার একটি সমস্যা হয়েছিল, তাই আমি আমার সমাধানটি এখানে পোস্ট করি।

উপরের উদাহরণগুলিতে সমস্তগুলি কেবলমাত্র ASCII মানযুক্ত স্ট্রিং সহ নমুনাগুলি দেখায়, এই ক্ষেত্রে সবকিছু ঠিকঠাক কাজ করে। তবে উইন্ডোজের স্ট্রিংয়ের সাথে যখন জার্মান উমলাটদের মতো অন্যান্য অক্ষরও থাকতে পারে তবে এই সমাধানগুলি কার্যকর হয় না

এই জাতীয় ক্ষেত্রে সঠিক ফলাফল দেয় এমন একমাত্র কোডটি

std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());

আপনার যদি এই জাতীয় স্ট্রিংগুলির সাথে ডিল করতে না হয় তবে উপরের উত্তরগুলি ভাল কাজ করবে।


এটি স্টাড :: স্ট্রিংয়ের উপর নির্ভর করে না তবে স্ট্রিং আক্ষরিক সহ আপনার উত্স ফাইলের এনকোডিং। যদি আপনার উত্স ফাইলটি ইউটিএফ 8 হয় তবে এটি কাজ করবে তবে আপনার কলটি বন্ধ করবেfromLocal8Bit()
নেমজারো

0

তদতিরিক্ত, আপনি যা চান রূপান্তর করতে, আপনি কিউভারিয়েন্ট বর্গ ব্যবহার করতে পারেন।

উদাহরণ স্বরূপ:

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

0

আপনার অর্থ কি কোনও স্ট্রিং, যেমন একটি 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());

1
যথেষ্ট সত্য, যদিও ওপিতে এমবেড করা NULL উল্লেখ করা হয়নি। যদি QByteArray::QByteArray (const char* data, int size)এটির প্রয়োজন হয়, আপনি প্রথমে বাফারটি মোড়ানোর জন্য ব্যবহার করতে পারেন এবং তারপরে এটি QStringকনস্ট্রাক্টরকে দিতে পারেন।
গাভিনব
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.