QT程序中文显示的其他方法

接上篇博文中介绍的中文显示问题,又在网上搜索了另外的一种设计,并且该设计能够解决比较常用的问题,介绍如下:

开始的时候,在网上找到了如下代码,加入到main.cpp文件中之后,所有的子对话框窗口都能显示中文,但是主窗口不能显示中文:

#include <QTextCodec>

   

    QApplication app(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForLocale( ));

    QTextCodec::setCodecForCStrings (QTextCodec::codecForLocale( ));

接着在网上继续查找资料,找到了如下代码,并替代了上述的代码,编译之后所有的窗口都能显示中文了;

#include <QTextCodec>

QApplication app(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForName(“GB2312” ));

    QTextCodec::setCodecForLocale (QTextCodec::codecForName( “GB2312”));

故对界面开发之“中文显示”进行了小结,但是,过了一天,进行新的编译之后且编译没有通过,出现了如下错误,之后所有的子对话框窗口就都显示为乱码了,但主对话框还是能够显示为中文:

“make: 警告:检测到时钟错误,您的创建可能是不完整的。”

于是在网上继续进行资料查询,并且进行了多次的代码组合,但出现了不同的问题,如:

使用如下代码时,主界面标题及菜单栏可显示为中文,但子对话框的标题、标签及按钮上的中文显示为乱码:

#include <QTextCodec>

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));

#include <QTextCodec>

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));

QTextCodec::setCodecForTr(QTextCodec::codecForLocale( ));

QTextCodec::setCodecForCStrings (QTextCodec::codecForLocale( ));

但使用如下代码时,子对话框的标题、标签及按钮上可显示中文,而主界面窗口的标题及菜单栏中文显示为乱码:

    #include <QTextCodec>

   

    QApplication app(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForLocale( ));

QTextCodec::setCodecForCStrings (QTextCodec::codecForLocale( ));

后来发现,主窗口显示中文的时候,也就是 mainwindow.cpp文件内的中文都可以显示,而其它的*.cpp文件都是乱码;于是,尝试了一下,将Control对话框窗口的Control_Standarddialogs.cpp文件内的代码内容拷贝到mainwindow.cpp文件中,然后撤掉Control_Standarddialogs.cpp重新编译,则Control对话框可以显示中文,而其他的对话框还是乱码。

经过不断的尝试和修改,后来在网上有人回帖说只使用如下一句语句就可以,但是必须在所有中文之前,然后我就将其他语句屏蔽到;但是还是不行;

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

后来发现只要先点击压力对话框,然后再点击其他对话框的话,就都能够显示中文。查看p_StandardDialogs.cpp文件代码,发现原来尝试的过程中所遗留下来的两句代码发挥了作用,将其它对话框的*.cpp文件中也加入这两句代码,编译之后都可以显示了。但是在点击“关于”菜单的时候又出现了一点问题,就是:当先点击“关于”菜单项时,跳出的消息对话框可以显示为中文,但在你点击完其它对话框之后再点击“关于”菜单项,跳出的消息对话框就显示为乱码,故在“关于”菜单项的槽函数中加入了如下代码,就没有这种现象了。

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

总结上述现象,得出下列结论:

代码“QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));”在主窗口中起作用,而代码“QTextCodec::setCodecForTr(QTextCodec::codecForLocale( ));

QTextCodec::setCodecForTrCStrings(QTextCodec::codecForLocale( ));”

对子对话框窗口起作用,并且每次点击窗口的时候都要响应一下上述函数,故上述三句代码要在每个窗口所有中文内容之前发挥作用。

则:在main.cpp文件中加入如下代码:

#include <QTextCodec>

   

QApplication app(argc, argv);

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

   

在消息对话框文件的槽函数中加入:

Void MainWindow::slotAbout( )

{

QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));

QMessageBox::about(this, tr(“帮助文档”), tr(“消息对话框显示内容”));

return;

}

在各子对话框的*.cpp文件中加入如下代码:

p_StandardDialogs::p_StandardDialogs( QWidget *parent, Qt::WindowFlags f)

                     :QDialog(parent, f)

{

QTextCodec::setCodecForTr(QTextCodec::codecForLocale( ));

QTextCodec::setCodecForTrCStrings(QTextCodec::codecForLocale( ));

setWindowTitle(tr(“中文字样”));

……

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值