maw*_*wia 83 c++ qstring qt qtcore
我试图通过以下方法将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());
Run Code Online (Sandbox Code Playgroud)
你能用这种方法详细说明可能的缺陷,还是提供另一种方法?
Eli*_*sky 109
好吧,Qt FAQ说:
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();
}
Run Code Online (Sandbox Code Playgroud)
所以也许你还有其他问题.究竟这不起作用?
dav*_*dnr 45
也许
my_qstring.toStdString().c_str();
或更安全,正如费德里科指出:
std::string str = my_qstring.toStdString();
const char* p = str.c_str();
Run Code Online (Sandbox Code Playgroud)
它远非最佳,但将完成工作.
小智 37
将QString转换为char*的最简单方法是qPrintable(const QString&str),这是一个扩展到的宏str.toLocal8Bit().constData().
如果您只是将它用于输出到文件或在屏幕上显示,David的答案可以正常工作,但如果函数或库需要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);
Run Code Online (Sandbox Code Playgroud)
已编辑
这种方式也有效
QString str ("Something");
char* ch = str.toStdString().C_str();
Run Code Online (Sandbox Code Playgroud)
小智 6
Qt提供最简单的API
const char *qPrintable(const QString &str)
const char *qUtf8Printable(const QString &str)
Run Code Online (Sandbox Code Playgroud)
如果你想要非常量数据指针使用
str.toLocal8Bit().data()
str.toUtf8().data()
Run Code Online (Sandbox Code Playgroud)