Qt中const char*的中文问题

fcliujun 2012-05-07 09:32:04
菜单中需要显示中文,需要的参数必须是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);

...全文
875 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcliujun 2012-05-22
  • 打赏
  • 举报
回复
问题解决了,是因为程序中中间有多次类型转换导致的,我在最后将其转为QString的时候处理了下就好了,散分了
dinjay 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

咋这么乱呢,这一行就能解决问题:setWindowTitle(QString::fromLocal8Bit("中文"));
在代码里面直接使用中文不是好主意。
[/Quote]
可行
1.
QString title = QTextCodec::codecForName("GBK")->toUnicode(QString("设置").toAscii().data());
2.如果你的字符串是unicode编码的const char*
QString strResult;
strResult.setUtf16(Result, nResultLen);
dbzhang800 2012-05-08
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

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

surveymnu_ = new uiPopupMenu( &appl_,ch);
[/Quote]
先了解点编码知识再继续吧,你这一段代码,最后只不过又等价于


surveymnu_ = new uiPopupMenu( &appl_,"中文");

aishulong520 2012-05-08
  • 打赏
  • 举报
回复
//先把文本框里的内容给QString类型的message,再把它给QString类型的temp,最后把temp转化为const char *类型的buf变量。

QString message = ui->textEdit->toPlainText();
QString temp = message.toLatin1();
const char buf = temp.data();
jdwx 2012-05-07
  • 打赏
  • 举报
回复
咋这么乱呢,这一行就能解决问题:setWindowTitle(QString::fromLocal8Bit("中文"));
在代码里面直接使用中文不是好主意。
fcliujun 2012-05-07
  • 打赏
  • 举报
回复
这样试过了还是乱码呢

QTextCodec * codec =QTextCodec::codecForName("GB18030");
QString str = codec->toUnicode("中文");
QByteArray arr = str.toLocal8Bit();
const char* ch = arr.data();

surveymnu_ = new uiPopupMenu( &appl_,ch);
lxyppc 2012-05-07
  • 打赏
  • 举报
回复
还有一点
确定一下你的uiPopupMenu函数对传入的字符串的生命周期有无要求
lxyppc 2012-05-07
  • 打赏
  • 举报
回复
你把代码改成
QByteArray arr = str.toLocal8Bit();
const char* ch = arr.data();

分成两步走

开个小玩笑,步子迈大了,容易扯着蛋

21,491

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧