代码改变世界

将QString转换为char *

2010-12-07 09:14  bingcaihuang  阅读(697)  评论(0)    收藏  举报

官方说明:

How can I convert aQString to char* and vice versa ?(trolltech)

Answer:

In order to convert aQString to a char*, then you first need to get a latin1 representation of thestring by calling toLatin1() on it which will return a QByteArray. Then calldata() on the QByteArray to get a pointer to the data stored in the byte array.See the documentation:

See the following examplefor a demonstration:

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

}

Note that it is necessaryto store the bytearray before you call data() on it, a call like the following

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

will make the applicationcrash as the QByteArray has not been stored and hence no longer exists.

To convert a char* to aQString you can use the QString constructor that takes a QLatin1String, e.g:

QString string =QString(QLatin1String(c_str2)) ;

 

注意在调用QByteArray.data()之前,必须要先显示储存这个bytearray。像这样const char *c_str2 = str2.toLatin1().data();

会使程序崩溃,因为QByteArray没有被储存,调用data()前是不存在的,必须先显式调用一次toLatin1(),再调用data()。

 

要将char*转换成QString,用接收QLatin1String作参数的QString构造函数就可以了:

QString string =QString(QLatin1String(c_str2)) ;