zoukankan      html  css  js  c++  java
  • 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," ");
    }
  • 相关阅读:
    (OK)(OK) running two Android-x86 in VirtualBox, they connect to NS3(MANETs) via "ethernet bridge"
    (OK) running two Android-x86 in VirtualBox, they connect to "ethernet bridge"
    (OK) virtualbox — VBoxManage internalcommands — with UUID already exists
    (OK) netcat transfer file to android from fedora23
    Setting VirtualBox to use it's built-in VNC server (ver. >= 4.2 I think)
    (OK) Android 6.0 (Marshmallow) Install apk
    netcat——Useful netcat examples on Linux
    Android下pm 命令详解
    (OK) Ubuntu 15.10: KVM vs. Xen vs. VirtualBox Virtualization Performance
    Virtualization solutions on Linux systems
  • 原文地址:https://www.cnblogs.com/rogation/p/3927754.html
Copyright © 2011-2022 走看看