How to change string into QString?
最基本的方法是什么?
如果使用STL兼容性编译,
1 2 | std::string str ="abc"; QString qstr = QString::fromStdString(str); |
如果"字符串"是指
qstring qstring::fromstdstring(const std::string&str)
1 2 | std::string str ="Hello world"; QString qstr = QString::fromStdString(str); |
如果按字符串表示的是ASCII编码的
qstring qstring::fromascii(const char*str,int size=-1)
1 2 | const char* str ="Hello world"; QString qstr = QString::fromAscii(str); |
如果您使用系统编码对
qString qString::FromLocal8bit(const char*str,int size=-1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | const char* str ="za?ó?? g??l? ja??"; // latin2 source file and system encodin nQString qstr = QString::fromLocal8Bit(str);<;/code><;/pr> n<;h> n<;>;If you have<;cod>;const char <;/cod>; that's UTF8 encoded then you'll need to use this method<;/> n<;p><;a href""http://doc.qt.io/qt-4.8/qstring.html#fromUtf"" rel""noreferrer>;QString QString::fromUtf8(const char * str, int size = -1<;/a><;/> n<;pre><;cod>;const char* str = read_raw""hello.tx""); // 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 nQString qstr = QString::fromUtf8(str);<;/code><;/pr> n<;h> n<;>;There's also method for<;cod>;const ushort <;/cod>; containing UTF16 encoded string<;/> n<;p><;a href""http://doc.qt.io/qt-4.8/qstring.html#fromUtf1"" rel""noreferrer>;QString QString::fromUtf16(const ushort * unicode, int size = -1<;/a><;/> n<;pre><;cod>;const ushort* str = read_raw""hello.tx""); // 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 nQString qstr = QString::fromUtf16(str);<;/code><;/pr> n <div class="suo-content">[collapse title=""]<ul><li>您不想用"new"构造qstring。</li><li>@罗汉-谢谢你的评论。我要把这个从我的答案中删除。</li><li>它不能回答这个问题。</li><li>我从未见过如此多的反对票被接受。为什么作者不把它编辑成比最高投票结果更好的答案呢?喜欢添加更多细节吗?在此之前,再享受一次-1。</li><li>似乎现在已经修好了,而且还不错,所以我把这个和另一个+1都给了。</li></ul>[/collapse]</div><p><center>[wp_ad_camp_1]</center></p><hr><P>替代方式:</P>[cc lang="cpp"]std::string s ="This is an STL string"; QString qs = QString::fromAscii(s.data(), s.size()); |
这样做的好处是不使用
1 2 | std::string s ="Sambuca"; QString q = s.c_str(); |
警告:如果
我遇到这个问题是因为我在跟踪答案时遇到了问题,所以我将我的解决方案发布在这里。
上面的示例都显示了仅包含ASCII值的字符串示例,在这种情况下,一切正常。但是,在Windows中处理字符串时,whcih也可以包含其他字符,如德语umlauts,则这些解决方案不起作用。
在这种情况下,唯一给出正确结果的代码是
1 2 | std::string s ="übernahme"; QString q = QString::fromLocal8Bit(s.c_str()); |
如果你不需要处理这些字符串,那么上面的答案就可以了。
此外,要转换您想要的任何内容,您可以使用qvariant类。
例如:
1 2 3 4 5 6 7 | 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(); |
输出
1 2 3 4 | "hello !" "10" "5.42" 5 |
你是指一个C字符串,比如在EDCOX1的5个字符串中,还是C++ EDCOX1的0个对象?
无论哪种方式,您都使用相同的构造函数,如qt引用中所述:
- Qt-Q字符串引用
对于常规的C字符串,只需使用主构造函数:
1 2 | char name[] ="Stack Overflow"; QString qname(name); |
对于
1 2 | std::string name2("Stack Overflow"); QString qname2(name2.c_str()); |