将QString转换为char *

时间:2011-03-31 19:29:16

标签: c++ string qt qt4

  

可能重复:
  QString to char conversion

我有一个函数(在STL中为fopen),它将char *参数作为我计算机中的路径,但我必须在那个地方使用QString,因此它不起作用。

如何将QString转换为char *以解决此问题?

2 个答案:

答案 0 :(得分:48)

请参阅here at How can I convert a QString to char* and vice versa?

  

为了将QString转换为   char *,那么你首先需要得到一个   latin1表示字符串的   在它上面调用toLatin1()   返回一个QByteArray。然后调用data()   在QByteArray上获取指针   存储在字节数组中的数据。看到   文档:

     

https://doc.qt.io/qt-5/qstring.html#toLatin1   https://doc.qt.io/qt-5/qbytearray.html#data

     

请参阅以下示例   示范:

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   它,如下所示的呼叫

const char *c_str2 = str2.toLatin1().data();
     

会使应用程序崩溃   QByteArray尚未存储和   因此不再存在

     

将char *转换为QString你   可以使用QString构造函数   采用QLatin1String,例如:

QString string = QString(QLatin1String(c_str2)) ;
     

参见文档:

     

https://doc.qt.io/qt-5/qlatin1string.html

当然,我发现还有另外一种方法previous SO answer

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

答案 1 :(得分:1)

您可以使用QFile而不是std :: fstream。

QFile           file(qString);

或者将QString转换为char *,如下所示:

std::ifstream   file(qString.toLatin1().data());

QString是UTF-16所以它在这里被转换为Latin1()但是QString有几个不同的转换,包括toUtf8()(检查你的文件系统它可能使用UTF-8)。

正如上面的@ 0A0D所述:将char *存储在变量中,而不会获得QByteArray的本地副本。

char const*      fileName = qString.toLatin1().data();
std::ifstream    file(fileName);  // fileName not valid here.

这是因为toLatin1()返回QByteArray的对象。由于它实际上并未绑定到变量,因此它是在表达式结尾处被销毁的临时变量。因此,对data()的调用返回一个指向内部结构的指针,该结构在';'之后不再存在。