QMessageBox 彈出框上的按鈕設置為中文


Qt 默認的彈出框上的按鈕式英文,雖然也知道是什么意思,但終究不如中文看着順眼。

    QMessageBox box(QMessageBox::Warning,"標題","彈出框按鈕更改為中文!");
    box.setStandardButtons (QMessageBox::Ok|QMessageBox::Cancel);
    box.exec ();

彈出效果:

在網上查了很多資料,有各種各樣的方法,弄得我暈頭轉向,畢竟我接觸Qt才不過一個月。不過在我堅持不懈的努力下,總算是找到了一個便捷的方法。

    QMessageBox box(QMessageBox::Warning,"標題","彈出框按鈕更改為中文!");
    box.setStandardButtons (QMessageBox::Ok|QMessageBox::Cancel);
    box.setButtonText (QMessageBox::Ok,QString("確 定"));
    box.setButtonText (QMessageBox::Cancel,QString("取 消"));
    box.exec ();

彈出效果:

怎么樣,簡單吧?

另外再附贈一個簡單的彈出框類。雖然還沒有辦法返回用戶點擊的按鈕,不過已經可以基本做到類似C#的使用效果了。這是我閑的無聊花了整整半天才搞定的。大概高手覺得很無趣吧?不過對我這種初學者來說,能弄到這種程度已經足以讓我滿足了。

這個類暫時先這樣,等以后有機會再做補充。大概……

文件頭:

#ifndef MESSAGEBOX_H
#define MESSAGEBOX_H

#include <QMessageBox>
#include <QPushButton>
#include <QString>
#include <QMap>

enum MessageBoxButtons
{
    OK = 0,                         //消息框包含“確定”按鈕
    OKCancel = 1,                   //消息框包含“確定”和“取消”按鈕
    AbortRetryIgnore = 2,           //消息框包含“中止”、“重試”和“忽略”按鈕
    YesNoCancel = 3,                //消息框包含“是”、“否”和“取消”按鈕
    YesNo = 4,                      //消息框包含“是”和“否”按鈕
    RetryCancel = 5                 //消息框包含“重試”和“取消”按鈕
};

enum MessageBoxIcon
{
    None = 0,                       //消息框未包含符號
    Hand = 1,                       //該消息框包含一個符號,該符號是由一個紅色背景的圓圈及其中的白色 X 組成的
    Question = 2,                   //該消息框包含一個符號,該符號是由一個圓圈和其中的一個問號組成的
    Exclamation = 3,                //該消息框包含一個符號,該符號是由一個黃色背景的三角形及其中的一個感嘆號組成的
    Asterisk = 4,                   //該消息框包含一個符號,該符號是由一個圓圈及其中的小寫字母 i 組成的
    Stop = 5,                       //該消息框包含一個符號,該符號是由一個紅色背景的圓圈及其中的白色 X 組成的
    Error = 6,                      //該消息框包含一個符號,該符號是由一個紅色背景的圓圈及其中的白色 X 組成的
    Warning = 7,                    //該消息框包含一個符號,該符號是由一個黃色背景的三角形及其中的一個感嘆號組成的
    Information = 8                 //該消息框包含一個符號,該符號是由一個圓圈及其中的小寫字母 i 組成的
};

class MessageBox
{
public:
    static void Show(const QString & content);
    static void Show(const QString & content, const QString & caption);
    static void Show(const QString & content, const QString & caption, MessageBoxButtons button);
    static void Show(const QString & content, const QString & caption, MessageBoxButtons button, MessageBoxIcon icon);

private:
    static QMap<QString,QMessageBox::StandardButton> GetButton(MessageBoxButtons type);
    static QString GetButtonText(QMessageBox::StandardButton standar);
signals:


};

#endif // MESSAGEBOX_H

源文件:

#include "MessageBox.h"

QString MessageBox::GetButtonText (QMessageBox::StandardButton standar)
{
    switch (standar)
    {
    case QMessageBox::Ok:
        return QString("確 定");
    case QMessageBox::Cancel:
        return QString("取 消");
    case QMessageBox::Abort:
        return QString("終 止");
    case QMessageBox::Retry:
        return QString("重 試");
    case QMessageBox::Ignore:
        return QString("忽 略");
    case QMessageBox::Yes:
        return QString("");
    case QMessageBox::No:
        return QString("");
    default:
        return QString("OK");
    }
}

QMap<QString,QMessageBox::StandardButton> MessageBox:: GetButton(MessageBoxButtons type)
{
    QMap<QString,QMessageBox::StandardButton> map;
    switch (type)
    {
    case MessageBoxButtons(0):
    default:
        map.insert (GetButtonText(QMessageBox::Ok),QMessageBox::Ok);
        break;
    case MessageBoxButtons(1):
        map.insert (GetButtonText(QMessageBox::Ok),QMessageBox::Ok);
        map.insert (GetButtonText(QMessageBox::Cancel),QMessageBox::Cancel);
        break;
    case MessageBoxButtons(2):
        map.insert (GetButtonText(QMessageBox::Abort),QMessageBox::Abort);
        map.insert (GetButtonText(QMessageBox::Retry),QMessageBox::Retry);
        map.insert (GetButtonText(QMessageBox::Ignore),QMessageBox::Ignore);
        break;
    case MessageBoxButtons(3):
        map.insert (GetButtonText(QMessageBox::Yes),QMessageBox::Yes);
        map.insert (GetButtonText(QMessageBox::No),QMessageBox::No);
        map.insert (GetButtonText(QMessageBox::Cancel),QMessageBox::Cancel);
        break;
    case MessageBoxButtons(4):
        map.insert (GetButtonText(QMessageBox::Yes),QMessageBox::Yes);
        map.insert (GetButtonText(QMessageBox::No),QMessageBox::No);
        break;
    case MessageBoxButtons(5):
        map.insert (GetButtonText(QMessageBox::Retry),QMessageBox::Retry);
        map.insert (GetButtonText(QMessageBox::Cancel),QMessageBox::Cancel);
        break;
    }
    return map;
}

void MessageBox:: Show(const QString & content, const QString & caption, MessageBoxButtons button,
                              MessageBoxIcon icon)
{
    QMessageBox::Icon con;
    switch(icon)
    {
    case MessageBoxIcon(0):
        con = QMessageBox::NoIcon;
        break;
    case MessageBoxIcon(1):
    case MessageBoxIcon(5):
    case MessageBoxIcon(6):
        con = QMessageBox::Critical;
        break;
    case MessageBoxIcon(2):
        con = QMessageBox::Question;
        break;
    case MessageBoxIcon(3):
    case MessageBoxIcon(7):
        con = QMessageBox::Warning;
        break;
    default:
        con = QMessageBox::Information;
        break;
    }
    QMap<QString,QMessageBox::StandardButton> ms = GetButton(button);
    QMessageBox box(con, caption, content);
    int size = ms.size ();
    switch(size)
    {
    case 1:
        box.setStandardButtons (ms.first ());
        box.setButtonText (ms.values().at (0),ms.keys ().at (0));
        break;
    case 2:
        box.setStandardButtons (ms.first () | ms.last ());
        box.setButtonText (ms.values().at (0),ms.keys ().at (0));
        box.setButtonText (ms.values().at (1),ms.keys ().at (1));
        break;
    case 3:
        box.setStandardButtons (ms.values ().at (0)|ms.values ().at (1)|ms.values ().at (2));
        box.setButtonText (ms.values().at (0),ms.keys ().at (0));
        box.setButtonText (ms.values().at (1),ms.keys ().at (1));
        box.setButtonText (ms.values().at (2),ms.keys ().at (2));
        break;
    }
    box.exec ();
}

void MessageBox:: Show(const QString & content, const QString & caption, MessageBoxButtons button)
{
    Show(content,caption,button,MessageBoxIcon(0));
}

void MessageBox:: Show(const QString & content, const QString & caption)
{
    Show(content,caption,MessageBoxButtons(0));
}

void MessageBox:: Show(const QString & content)
{
    Show(content," ");
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM