如何将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(const 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());