如何将string更改为QString?

什么是最基本的方法呢?

如果通过string你的意思是std::string你可以用这个方法来做到这一点:

QString QString :: fromStdString(const std :: string&str)

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

如果通过string,你的意思是ASCII编码的const char *那么你可以使用这个方法:

QString QString :: fromAscii(con​​st char * str,int size = -1)

 const char* str = "Hello world"; QString qstr = QString::fromAscii(str); 

如果你有用系统编码编码的const char * ,可以用QTextCodec :: 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编码的string的方法:

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); 

如果使用STL兼容性编译, QString有一个静态方法将std::string转换为QString

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

替代方法:

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

这样做的好处是不使用.c_str() ,如果没有地方在末尾添加'\0' ,可能会导致std::string复制自身。

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

警告:如果std::string包含\0 s,这将不起作用。

我遇到了这个问题,因为我在回答问题时遇到了问题,所以我在这里发布我的解决scheme。

上面的例子都显示了只包含ASCII值的string样本,在这种情况下,一切正常。 但是,在Windows中处理string时,也可能包含其他字符,如德语变音符号,则这些解决scheme不起作用

在这种情况下给出正确结果的唯一代码是

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

如果你不必处理这样的string,那么上面的答案将正常工作。

此外,要转换任何你想要的,你可以使用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 

你的意思是一个Cstring,如char*string或C ++ std::string对象?

无论哪种方式,您都使用相同的构造函数,如QT参考文献中所述:

  • Qt QString参考

对于常规的Cstring,只需使用主构造函数:

 char name[] = "Stack Overflow"; QString qname(name); 

对于一个std::string ,你得到了char*到缓冲区并把它传递给QString构造函数:

 std::string name2("Stack Overflow"); QString qname2(name2.c_str());