您的位置:首页 > 编程语言 > Qt开发

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

2013-01-22 22:12 489 查看
接上篇博文中介绍的中文显示问题,又在网上搜索了另外的一种设计,并且该设计能够解决比较常用的问题,介绍如下:
开始的时候,在网上找到了如下代码,加入到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(“中文字样”));
……

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: