引言:在QT设计UI程序过程中,整套系统都是中文版本,然而信息提示默认只有中文,难免有点小纠结,这里针对QMessageBox稍微做了一点点改进,使其支持完美的中文提示框。调用方式非常简单,只需要将QMessageBox调用地方,改为QShowMessage即可(头文件引用不可缺少)。
头文件声明:
#ifndef QSHOWMESSAGE_H
#define QSHOWMESSAGE_H
#include <QMessageBox>
#include <QString>
class QShowMessage
{
public:
static int information(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1 = 0, int button2 = 0);
inline static QMessageBox::StandardButton information(QWidget *parent, const QString &title,
const QString& text,
QMessageBox::StandardButton button0, QMessageBox::StandardButton button1 = QMessageBox::StandardButton::NoButton)
{ return QMessageBox::StandardButton(information(parent, title, text, QMessageBox::StandardButtons(button0), QMessageBox::StandardButtons(button1))); }
static int question(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1 = 0, int button2 = 0);
inline static int question(QWidget *parent, const QString &title,
const QString& text,
QMessageBox::StandardButton button0, QMessageBox::StandardButton button1)
{ return question(parent, title, text, QMessageBox::StandardButtons(button0), button1); }
static int warning(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1, int button2 = 0);
inline static int warning(QWidget *parent, const QString &title,
const QString& text,
QMessageBox::StandardButton button0, QMessageBox::StandardButton button1)
{ return warning(parent, title, text, QMessageBox::StandardButtons(button0), button1); }
};
#endif // QSHOWMESSAGE_H
源文件定义:
#include "QShowMessage.h"
inline void setMessageBoxButtonText(QMessageBox& box, const QMessageBox::StandardButtons buttons)
{
if ((buttons & QMessageBox::Ok) == QMessageBox::Ok)
box.setButtonText (QMessageBox::Ok, QString("确 定"));
if ((buttons & QMessageBox::Cancel) == QMessageBox::Cancel)
box.setButtonText (QMessageBox::Cancel, QString("取 消"));
if ((buttons & QMessageBox::Yes) == QMessageBox::Yes)
box.setButtonText (QMessageBox::Yes, QString("是"));
if ((buttons & QMessageBox::No) == QMessageBox::No)
box.setButtonText (QMessageBox::No, QString("否"));
if ((buttons & QMessageBox::Save) == QMessageBox::Save)
box.setButtonText (QMessageBox::Save, QString("保 存"));
if ((buttons & QMessageBox::SaveAll) == QMessageBox::SaveAll)
box.setButtonText (QMessageBox::SaveAll, QString("保存所有"));
if ((buttons & QMessageBox::Open) == QMessageBox::Open)
box.setButtonText (QMessageBox::Open, QString("打 开"));
if ((buttons & QMessageBox::YesToAll) == QMessageBox::YesToAll)
box.setButtonText (QMessageBox::YesToAll, QString("全 是"));
if ((buttons & QMessageBox::NoToAll) == QMessageBox::NoToAll)
box.setButtonText (QMessageBox::NoToAll, QString("全 否"));
if ((buttons & QMessageBox::Abort) == QMessageBox::Abort)
box.setButtonText (QMessageBox::Abort, QString("终 止"));
if ((buttons & QMessageBox::Retry) == QMessageBox::Retry)
box.setButtonText (QMessageBox::Retry, QString("重 试"));
if ((buttons & QMessageBox::Ignore) == QMessageBox::Ignore)
box.setButtonText (QMessageBox::Ignore, QString("忽 略"));
if ((buttons & QMessageBox::Close) == QMessageBox::Close)
box.setButtonText (QMessageBox::Close, QString("关 闭"));
if ((buttons & QMessageBox::Apply) == QMessageBox::Apply)
box.setButtonText (QMessageBox::Apply, QString("应 用"));
if ((buttons & QMessageBox::Help) == QMessageBox::Help)
box.setButtonText (QMessageBox::Help, QString("帮 助"));
if ((buttons & QMessageBox::Reset) == QMessageBox::Reset)
box.setButtonText (QMessageBox::Reset, QString("重 置"));
if ((buttons & QMessageBox::RestoreDefaults) == QMessageBox::RestoreDefaults)
box.setButtonText (QMessageBox::RestoreDefaults, QString("恢复默认"));
}
int QShowMessage::information(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1/* = 0*/, int button2/* = 0*/)
{
QMessageBox::StandardButtons buttons = QMessageBox::StandardButton(button0)|QMessageBox::StandardButton(button1)|QMessageBox::StandardButton(button2);
QMessageBox box(QMessageBox::Information, title, text, buttons, parent);
box.setStandardButtons(buttons);
setMessageBoxButtonText(box, buttons);
return box.exec ();
}
int QShowMessage::question(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1/* = 0*/, int button2/* = 0*/)
{
QMessageBox::StandardButtons buttons = QMessageBox::StandardButton(button0)|QMessageBox::StandardButton(button1)|QMessageBox::StandardButton(button2);
QMessageBox box(QMessageBox::Question, title, text, buttons, parent);
box.setStandardButtons(buttons);
setMessageBoxButtonText(box, buttons);
return box.exec ();
}
int QShowMessage::warning(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1, int button2/* = 0*/)
{
QMessageBox::StandardButtons buttons = QMessageBox::StandardButton(button0)|QMessageBox::StandardButton(button1)|QMessageBox::StandardButton(button2);
QMessageBox box(QMessageBox::Warning, title, text, buttons, parent);
box.setStandardButtons(buttons);
setMessageBoxButtonText(box, buttons);
return box.exec ();
}
用例说明:
// 替换前的代码
void MainWindow::closeEvent(QCloseEvent *event)
{
if (QMessageBox::Yes == QMessageBox::question(this, "提示", "您确定要退出软件吗?", QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes) ){
event->accept();
}
else {
event->ignore();
}
}
// 替换后的代码
void MainWindow::closeEvent(QCloseEvent *event)
{
if (QMessageBox::Yes == QShowMessage::question(this, "提示", "您确定要退出软件吗?", QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes) ){
event->accept();
}
else {
event->ignore();
}
}