美吉姆 杭州东城广场:Qt4.4.3 中文显示

来源:百度文库 编辑:中财网 时间:2024/05/06 14:39:02

Qt4.4.3 中文显示

Qt4.4.3 2010-05-05 16:14:35 阅读101 评论0   字号: 订阅

 


 

QTextCodec::setCodecForTr(QTextCodec::codecForLocale( ));  显示中文前加这句 中文加tr

    对于界面的中文显示问题,在网上找了一些资料,并且根据这些资料一直试验了很久,前后出现了很多问题。原来已经小结过一回,但后来不知道怎么又出现了新问题,现就整个过程再小结一回。希望以后不会再出现问题。

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

#include

   

    QApplication app(argc, argv);

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

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

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

#include

QApplication app(argc, argv);

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

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

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

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

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

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

#include

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

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

#include

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

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

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

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

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

    #include

   

    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

   

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(“中文字样”));

……

}