我试图通过以下方法为QString转换为char *类型,但他们似乎没有工作做。

//QLineEdit *line=new QLineEdit();{just to describe what is line here}

QString temp=line->text();
char *str=(char *)malloc(10);
QByteArray ba=temp.toLatin1();
strcpy(str,ba.data());

你能阐述可能的缺陷该方法,或给予一种替代方法?

有帮助吗?

解决方案

那么, Qt的常见问题解答表示:

int main(int argc, char **argv)
{
 QApplication app(argc, argv);
  QString str1 = "Test";
  QByteArray ba = str1.toLocal8Bit();
  const char *c_str2 = ba.data();
  printf("str2: %s", c_str2);
  return app.exec();
}

因此,也许你有其他问题。究竟如何不这项工作?

其他提示

也许

my_qstring.toStdString().c_str();

或更安全的,因为费德里科指出:

std::string str = my_qstring.toStdString();
const char* p = str.c_str();

这是远不够理想,但会做的工作。

转换一个的QString 炭最简单的方法* qPrintable(常量的QString&STR), 这是一个宏扩展到str.toLocal8Bit().constData()

如果你只使用它输出到文件或显示在屏幕上大卫的回答工作正常,但如果一个函数或库需要解析一个char *,则此方法效果最佳:

// copy QString to char*
QString filename = "C:\dev\file.xml";
char* cstr;
string fname = filename.toStdString();
cstr = new char [fname.size()+1];
strcpy( cstr, fname.c_str() );

// function that requires a char* parameter
parseXML(cstr);

<强> EDITED

这种方式也适用

QString str ("Something");

char* ch = str.toStdString().C_str();

您字符串可能包含非Latin1的字符,从而导致不确定的数据。这取决于你的意思是“它deosn't似乎工作”的东西。

正确的解决方案会是这样

   QString k;
   k = "CRAZYYYQT";
   char ab[16];
   sprintf(ab,"%s",(const char *)((QByteArray)(k.toLatin1()).data()) );
   sprintf(ab,"%s",(const char *)((QByteArray)(k.toStdString()).data()));  
   sprintf(ab,"%s",(const char *)k.toStdString().c_str()  );
   qDebug()<<"--->"<<ab<<"<---";

如果您的字符串包含非ASCII字符 - 这是更好地做这种方式: s.toUtf8().data()(或s->toUtf8().data()

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top