读书人

Qt中const char*的中文有关问题

发布时间: 2012-05-23 13:44:13 作者: rapoo

Qt中const char*的中文问题
菜单中需要显示中文,需要的参数必须是const char* ,而不是QString,所以需要将QString 转为const char*
尝试了多种方法,一直都是乱码,以下类似的组合我都尝试了,还是不行。请高手指点,最好能直接告诉我如何直接解决这个问题的方法和代码,不胜感激!

//QTextCodec::setCodecForTr(QTextCodec::codecForName("System"));//设置中文字体编码
//QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));//设置中文字体编码
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB18030"));//设置中文字体编码
//QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));//设置中文字体编码
//QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));//设置中文字体编码
//QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));//设置中文字体编码

QString str = "中文";
const char* ch= str.toAscii().constData();
//const char* ch= str.toStdString().c_str()
//const char* ch= str.toLatin1().data()
//const char* ch= QObject::tr("中文").toLocal8Bit().data();

surveymnu_ = new uiPopupMenu( &appl_,ch);



[解决办法]
你把代码改成
QByteArray arr = str.toLocal8Bit();
const char* ch = arr.data();

分成两步走

开个小玩笑,步子迈大了,容易扯着蛋
[解决办法]
咋这么乱呢,这一行就能解决问题:setWindowTitle(QString::fromLocal8Bit("中文"));
在代码里面直接使用中文不是好主意。
[解决办法]

探讨

这样试过了还是乱码呢
QTextCodec * codec =QTextCodec::codecForName("GB18030");
QString str = codec->toUnicode("中文");
QByteArray arr = str.toLocal8Bit();
const char* ch = arr.data();

surveymnu_ = new uiPopupMenu( &appl_,ch);

[解决办法]
探讨

咋这么乱呢,这一行就能解决问题:setWindowTitle(QString::fromLocal8Bit("中文"));
在代码里面直接使用中文不是好主意。

[解决办法]
//先把文本框里的内容给QString类型的message,再把它给QString类型的temp,最后把temp转化为const char *类型的buf变量。

QString message = ui->textEdit->toPlainText();
QString temp = message.toLatin1();
const char buf = temp.data();

读书人网 >QT开发

热点推荐