Qt学习总结之QMessageBox

42 篇文章 1 订阅
36 篇文章 8 订阅

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

一.对话框的构成

在这里插入图片描述

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

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

    mbox = new QMessageBox();

    mbox->resize(100,100);
    mbox->setModal(false);
//    mbox->setWindowModality(Qt::NonModal);
    mbox->show();

二.内容展示

1.图标

标准图标的展示方法

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

2.内容

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

mbox->setTextFormat(Qt::RichText);
   mbox->setText("<h2>文件已被修改</h2><h3>是否保存</h3>");
//    mbox->setText("<h3>是否保存</h3>");
   mbox->setInformativeText("是否保存");

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

mbox->setTextFormat(Qt::RichText);
    mbox->setText("<h2>文件已被修改</h2><h3>是否保存</h3>");
//    mbox->setText("<h3>是否保存</h3>");
    mbox->setInformativeText("是否保存");

    QCheckBox *mcheckbox = new QCheckBox("下次不再提示");
    mbox->setCheckBox(mcheckbox);

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

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

在这里插入图片描述

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

b.默认按钮设置

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

标准按钮定义

mbox->setDefaultButton(mbt);

效果如图:

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

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

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

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
    };
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式小龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值