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);
	}

重新编译运行即可显示中文。

QMessageBox对话框

参考:
修改ts文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值