• Qt学习总结之QMessageBox


    QMessageBox主要用来通知用户或者请求用户提问和接收应答一个模态对话框。

    一.对话框的构成

    在这里插入图片描述

    图标是有标准图标的,可以直接调用。

    我们声明的消息框,初始状态都是模态的(阻塞程序,这里就不演示了),如果想把它变成非模态的,可以直接设置

        mbox = new QMessageBox();
    
        mbox->resize(100,100);
        mbox->setModal(false);
    //    mbox->setWindowModality(Qt::NonModal);
        mbox->show();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    二.内容展示

    1.图标

    标准图标的展示方法

    mbox->setIcon(QMessageBox::NoIcon );        //无图标
    mbox->setIcon(QMessageBox::Information);    //信息图标
    mbox->setIcon(QMessageBox::Warning );       //警告图标
    mbox->setIcon(QMessageBox::Critical );      //严重警告图标
    mbox->setIcon(QMessageBox::Question );      //提问图标
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.内容

        消息框的内容是支持富文本的,我们可以用setText()函数直接设置其提示内容,此外还有一个setInformativeText(),是用来显示提示文本的

    mbox->setTextFormat(Qt::RichText);
       mbox->setText("

    文件已被修改

    是否保存

    "
    ); // mbox->setText("

    是否保存

    ");
    mbox->setInformativeText("是否保存");
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
    在上面的效果加个案例

    mbox->setTextFormat(Qt::RichText);
        mbox->setText("

    文件已被修改

    是否保存

    "
    ); // mbox->setText("

    是否保存

    ");
    mbox->setInformativeText("是否保存"); QCheckBox *mcheckbox = new QCheckBox("下次不再提示"); mbox->setCheckBox(mcheckbox);
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述
    还有展示详情文本
    详情文本设置后会有个显示详细内容的按钮,点击按钮会显示详情。

    mbox->setDetailedText("详情文档");
    
    • 1

    在这里插入图片描述

    2.按钮

    按钮的定义有些复杂,分很多种,我们一步步来看

    a.按钮的角色

    按钮在对话框中是有角色分工的(ButtonRole)。在了解按钮的配置时我们要先了解按钮有哪些角色分工
    如果我们需要自定义个按钮,这个按钮是起了哪个角色的作用,我们就可以给出相应的定义

    InvalidRole = … // type: ‘QMessageBox.ButtonRole’
    AcceptRole = … // type: ‘QMessageBox.ButtonRole’
    RejectRole = … // type: ‘QMessageBox.ButtonRole’
    DestructiveRole = … // type: ‘QMessageBox.ButtonRole’
    ActionRole = … // type: ‘QMessageBox.ButtonRole’
    HelpRole = … // type: ‘QMessageBox.ButtonRole’
    YesRole = … // type: ‘QMessageBox.ButtonRole’
    NoRole = … // type: ‘QMessageBox.ButtonRole’
    ResetRole = … // type: ‘QMessageBox.ButtonRole’
    ApplyRole = … // type: ‘QMessageBox.ButtonRole’

    b.添加移除自定义按钮
    如果想要移除按钮的话可以直接删除按钮控件,要注意的是后面两个添加自定义按钮的方法是有个返回值的,因为我们并不是先实例一个按钮在添加在对话框中而是直接在添加的时候定义,那么添加的这个按钮控件作为返回值被返回。

    QPushButton *mbt = new QPushButton("帮助");
        mbox->addButton(mbt,QMessageBox::HelpRole);
        mbox->removeButton(mbt);
    
    • 1
    • 2
    • 3

    b.默认按钮设置

    有些时候我们想弹出的对话框某一个按钮是在焦点上的,那么我们就可以直接通过键盘的回车键对其进行操作,那么就用到下面的方法:设置默认按钮

    标准按钮定义

    mbox->setDefaultButton(mbt);
    
    • 1

    效果如图:

    在这里插入图片描述
    c.关联退出按钮(键盘Esc)

    我们可以把键盘Esc键关联给某个按钮,当键盘Esc键被按下时对话框退出,并且关联的按钮会触发clicked事件。

    QPushButton *mbt_exec = new QPushButton("退出");
    mbox->addButton(mbt_exec,QMessageBox::HelpRole);
    mbox->setEscapeButton(mbt_exec);
    
    • 1
    • 2
    • 3

    3.文本交互标志
    默认情况下消息框里的文本是不能被选中的,详情是可以选中并复制。我们可以通过下面的方法改变其状态

    QMessageBox::setTextInteractionFlags(self, flags: typing.Union[QtCore.Qt.TextInteractionFlags, QtCore.Qt.TextInteractionFlag])
    NoTextInteraction = … // type: ‘Qt.TextInteractionFlag’
    TextSelectableByMouse = … // type: ‘Qt.TextInteractionFlag’
    TextSelectableByKeyboard = … // type: ‘Qt.TextInteractionFlag’
    LinksAccessibleByMouse = … // type: ‘Qt.TextInteractionFlag’
    LinksAccessibleByKeyboard = … // type: ‘Qt.TextInteractionFlag’
    TextEditable = … // type: ‘Qt.TextInteractionFlag’
    TextEditorInteraction = … // type: ‘Qt.TextInteractionFlag’
    TextBrowserInteraction = … // type: ‘Qt.TextInteractionFlag’

    4.主要静态方法

    有些静态方法是很好用的,我们可以直接弹出个消息框用来给出提示信息。也就是说直接给封装好的消息界面,只要把关键的提示字在初始化的时候定义,就可以直接用了。

    QMessageBox::about(QWidget *parent, const QString &title, const QString &text);
    QMessageBox::question(QWidget *parent, const QString &title,
    const QString &text, StandardButtons buttons = StandardButtons(Yes | No),
    StandardButton defaultButton = NoButton);‘QMessageBox.StandardButton’] = …,
    defaultButton: ‘QMessageBox.StandardButton’ = …)
    QMessageBox::warning(QWidget *parent, const QString &title,
    const QString &text, StandardButtons buttons = Ok,
    StandardButton defaultButton = NoButton);

    这些对话框方法基本一样,就是图标不同。并且这种方法是有返回值的(返回值为每个StandardButton所对应的枚举值)下面的表就给出了各种按键所对应的枚举值。

    enum StandardButton {
            // keep this in sync with QDialogButtonBox::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,
    
            FirstButton        = Ok,                // internal
            LastButton         = RestoreDefaults,   // internal
    
            YesAll             = YesToAll,          // obsolete
            NoAll              = NoToAll,           // obsolete
    
            Default            = 0x00000100,        // obsolete
            Escape             = 0x00000200,        // obsolete
            FlagMask           = 0x00000300,        // obsolete
            ButtonMask         = ~FlagMask          // obsolete
        };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
  • 相关阅读:
    stm32---外部中断
    WRF进阶:WRF中Noah-MP地面方案中雪反照率的计算
    W5500-EVB-PICO进行MQTT连接订阅发布教程(十二)
    静态Vxlan隧道同子网互访实验
    golang关于errors.As两个参数的问题记录
    GUI设计——PyQt5快速入门
    分享68个毕业答辩PPT,总有一款适合您
    智慧矿山解决方案-最新全套文件
    分析每一段的代码的代码及代码运行的结果
    ZDH-权限模块
  • 原文地址:https://blog.csdn.net/qq_27726087/article/details/126644573