woo*_*ody 22 c++ string qt qt4
可能重复:
QString到char转换
我有一个函数(在STL中fopen),它将char*参数作为我计算机中的路径,但我必须在那个地方使用QString,因此它不起作用.
如何将QString转换为char*来解决此问题?
小智 48
为了将QString转换为char*,您首先需要通过调用它上面的Latin1()来获取该字符串的latin1表示,这将返回一个QByteArray.然后在QByteArray上调用data()以获取指向存储在字节数组中的数据的指针.查看文档:
https://doc.qt.io/qt-5/qstring.html#toLatin1 https://doc.qt.io/qt-5/qbytearray.html#data
有关演示,请参阅以下示例:
Run Code Online (Sandbox Code Playgroud)int main(int argc, char **argv) { QApplication app(argc, argv); QString str1 = "Test"; QByteArray ba = str1.toLatin1(); const char *c_str2 = ba.data(); printf("str2: %s", c_str2); return app.exec(); }
请注意,在调用data()之前必须存储bytearray,如下所示
Run Code Online (Sandbox Code Playgroud)const char *c_str2 = str2.toLatin1().data();
将导致应用程序崩溃,因为QByteArray尚未存储,因此不再存在
要将char*转换为QString,您可以使用带有QLatin1String的QString构造函数,例如:
Run Code Online (Sandbox Code Playgroud)QString string = QString(QLatin1String(c_str2)) ;
查看文档:
当然,我发现之前的SO答案有另一种方法:
QString qs;
// Either this if you use UTF-8 anywhere
std::string utf8_text = qs.toUtf8().constData();
// or this if you on Windows :-)
std::string current_locale_text = qs.toLocal8Bit().constData();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
71071 次 |
最近记录: |