इसे करने का सबसे बुनियादी तरीका क्या है?
इसे करने का सबसे बुनियादी तरीका क्या है?
जवाबों:
यदि स्ट्रिंग से आपका मतलब है कि std::string
आप इसे इस विधि से कर सकते हैं:
QString QString :: fromStdString (const std :: string और str)
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);
यदि स्ट्रिंग से आपका मतलब है कि असीसी एनकोडेड है const char *
तो आप इस विधि का उपयोग कर सकते हैं:
QString QString :: fromAscii (const char * str, int size = -1)
const char* str = "Hello world";
QString qstr = QString::fromAscii(str);
यदि आपने const char *
सिस्टम एन्कोडिंग के साथ कूटबद्ध किया है जिसे क्यूटेक्स्टकोड के साथ पढ़ा जा सकता है :: codecForLocale () तो आपको इस विधि का उपयोग करना चाहिए:
QString QString :: fromLocal8Bit (const char * str, int size = -1)
const char* str = "zażółć gęślą jaźń"; // latin2 source file and system encoding
QString qstr = QString::fromLocal8Bit(str);
यदि आपके पास const char *
UTF8 कूटबद्ध है तो आपको इस विधि का उपयोग करने की आवश्यकता होगी:
QString QString :: fromUtf8 (const char * str, int size = -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 *
UTF16 एन्कोडेड स्ट्रिंग युक्त विधि भी है :
QString QString :: fromUtf16 (const ushort * unicode, int size = -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);
यदि एसटीएल संगतता के साथ संकलित किया गया है, तो एक को एक में बदलने के लिए QString
एक स्थिर विधिstd::string
है QString
:
std::string str = "abc";
QString qstr = QString::fromStdString(str);
QString qstr = QString(str.c_str());
? निश्चित नहीं है कि क्या QString
प्रतियां इसमें पारित हुई हैं।
fromStdString
इनका संरक्षण करेगा, जिससे निर्माण नहीं .c_str
होगा। (और यह ठीक था कि ऐसा कैसे किया जाए जिससे मुझे इस सवाल
वैकल्पिक तरीका:
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();
चेतावनी: इसमें काम नहीं होगा यदि s std::string
शामिल है \0
।
मैं इस सवाल के कारण आया क्योंकि मुझे उत्तर का पालन करते समय एक समस्या थी, इसलिए मैं यहां अपना समाधान पोस्ट करता हूं।
उपरोक्त उदाहरण सभी ASCII मूल्यों वाले स्ट्रिंग्स के साथ नमूने दिखाते हैं, जिस स्थिति में सब कुछ ठीक काम करता है। हालाँकि, जब Windows whcih में तार के साथ काम करने में जर्मन umlauts जैसे अन्य वर्ण भी हो सकते हैं, तो ये समाधान काम नहीं करते हैं
एकमात्र कोड जो ऐसे मामलों में सही परिणाम देता है
std::string s = "Übernahme";
QString q = QString::fromLocal8Bit(s.c_str());
यदि आपको ऐसे तार से निपटने की जरूरत नहीं है, तो उपरोक्त उत्तर ठीक काम करेंगे।
fromLocal8Bit()
इसके अलावा, जो भी आप चाहते हैं उसे बदलने के लिए, आप QVariant वर्ग का उपयोग कर सकते हैं।
उदाहरण के लिए:
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
ऑब्जेक्ट?
किसी भी तरह से, आप एक ही निर्माता का उपयोग करते हैं, क्यूटी संदर्भ में प्रलेखित:
एक नियमित C स्ट्रिंग के लिए, बस मुख्य कंस्ट्रक्टर का उपयोग करें:
char name[] = "Stack Overflow";
QString qname(name);
A के लिए std::string
, आप char*
बफर को प्राप्त करते हैं और उसे QString
कंस्ट्रक्टर के पास भेजते हैं:
std::string name2("Stack Overflow");
QString qname2(name2.c_str());
QByteArray::QByteArray (const char* data, int size)
पहले बफर को लपेटने के लिए उपयोग कर सकते हैं , और फिर QString
निर्माणकर्ता को पास कर सकते हैं ।