Qt5 QMessageBox按钮显示中文
Qt5中QMessageBox按钮无法显示中文解决办法
Qt5中是使用translations/qt_zh_CN.qm文件来翻译成中文,但添加此翻译文件后QMessageBox按钮依然无法显示中文,如果想从源头查看原因需要查看Qt5源码并修改其翻译文件。
在源码中可以查找原因,在Qt5源码源码中你可以看到。
buttonBox = new QDialogButtonBox;
buttonBox->setObjectName(QLatin1String("qt_msgbox_buttonbox"));
buttonBox->setCenterButtons(q->style()->styleHint(QStyle::SH_MessageBox_CenterButtons, 0, q));
QObject::connect(buttonBox, SIGNAL(clicked(QAbstractButton*)),
q, SLOT(_q_buttonClicked(QAbstractButton*)));
对话框中按钮buttonBox是QDialogButtonBox类,再接着看QDialogButtonBox类源码,在头文件中你可以看到。
enum StandardButton {
// keep this in sync with QMessageBox::StandardButton and QPlatformDialogHelper::StandardButton
NoButton = 0x00000000,
Ok = 0x00000400,
Save = 0x00000800,
SaveAll = 0x00001000,
Open = 0x00002000,
Yes = 0x00004000,
YesToAll = 0x00008000,
No = 0x00010000,
NoToAll = 0x00020000,
Abort = 0x00040000,
Retry = 0x00080000,
Ignore = 0x00100000,
Close = 0x00200000,
Cancel = 0x00400000,
Discard = 0x00800000,
Help = 0x01000000,
Apply = 0x02000000,
Reset = 0x04000000,
RestoreDefaults = 0x08000000,
修改ts文件
这就是QMessageBox上buttonBox的各种类型;使用Qt Linguist看qt_zh_CN.ts文件
<context>
<name>QDialogButtonBox</name>
<message>
<location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1866"/>
<location line="+464"/>
<location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+561"/>
<source>OK</source>
<translation>确定</translation>
</message>
<message>
<location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+3"/>
<source>Save</source>
<translation>保存</translation>
</message>
...
</context>
修改ts文件,将QDialogButtonBox修改为QPlatformTheme。
<context>
<name>QPlatformTheme</name>
<message>
<location filename="../src/gui/dialogs/qmessagebox.cpp" line="+1866"/>
<location line="+464"/>
<location filename="../src/gui/widgets/qdialogbuttonbox.cpp" line="+561"/>
<source>OK</source>
<translation>确定</translation>
</message>
...
</context>
使用Qt Linguist重新发布qm文件。
添加qt_zh_CN.qm文件
添加翻译文件;我使用相对路径,需要在资源文件中添加,也可以使用绝对路径,建议使用相对路径
QApplication a(argc, argv);
QTranslator qtTrans;
if (qtTrans.load(":/translations/qt_zh_CN.qm"))
{
a.installTranslator(&qtTrans);
}
重新编译运行即可显示中文。
参考:
修改ts文件