76.QMessageBox

继承QDialog

它是由这些部分组成的

76.QMessageBox

它是可以使用标准图标的,比如

  • 消息图标

76.QMessageBox

  • 错误图标

76.QMessageBox

  • 警告图标

76.QMessageBox

  • 提问图标

76.QMessageBox

  • 无图标

76.QMessageBox

目录

1  基本操作

1.1  构造函数

1.1.1  方式一

1.1.2  方式二

1.2  设置对话框标题 setWindowTitle()

1.3  图标设置

1.3.1  标准图标 setIcon()

1.3.2  自定义图标 setIconPixmap()

1.4  设置主要标题 setText(str)

1.5  提示文本

1.5.1  设置 setInformativeText(str)

1.5.2  获取 informativeText()

1.6  详细文本

1.6.1  设置 setDetailedText(self, str)

1.6.2  获取 detailedText()

1.7  复选框

1.7.1  设置 setCheckBox()

1.7.2  获取 checkBox()

2  按钮操作

2.1  添加按钮

2.2  移除按钮 removeButton()

2.3  标准按钮

2.3.1  设置 setStandarButtons()

2.3.2  获取

2.4  默认按钮

2.4.1  设置 setDefaultButton()

2.4.2  获取 defaultButton()

2.5  退出按钮

2.5.1  设置 setEscapeButton()

2.5.2  获取 escapeButton()

2.6  获取按钮

2.6.1  获取指定的标准按钮 button()

2.6.2  获取所有的按钮 buttons()

2.7  获取按钮角色 buttonRole()

2.8  获取被点击的按钮 clickedButton()

3  信号 buttonClicked(QAbstractButton button)

4  文本交互

5  静态方法

5.1  QMessageBox.about()

5.2  QMessageBox.aboutQt()

5.3  QMessageBox.critical()

5.4  QMessageBox.information()

5.5  QMessageBox.question()

5.6  QMessageBox.warning()


1  基本操作

1.1  构造函数

1.1.1  方式一

一种是可以只放父对象

QMessageBox(parent: QWidget = None)

76.QMessageBox

76.QMessageBox

76.QMessageBox

虽然我使用的是show()这个方法,但是我们无法将焦点放到其他的窗口上,也就是说即使用show(),弹出的窗口也是模态的

如果想搞成非模态的可用父控件QDialog中的setModal(False)的方法

1.1.2  方式二

另一种可以依次放入

  • 图标
  • 窗口标题
  • 主提示语
  • 多个按钮
  • 父对象
  • 样式

QMessageBox(QMessageBox.Icon, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.StandardButton] = QMessageBox.NoButton, parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.Dialog|Qt.MSWindowsFixedSizeDialogHint)

1.1.2.1  图标

在构造函数中,我们只能使用标准图标,所有标准图标如下所示

  • QMessageBox.NoIcon 没有图标
  • QMessageBox.Question 提问图标
  • QMessageBox.Information 消息图标
  • QMessageBox.Warning 警告图标
  • QMessageBox.Critical 错误图标

1.1.2.2  按钮

76.QMessageBox

  • QMessageBox.Ok ok按钮(确定)
  • QMessageBox.Open open按钮(打开)
  • QMessageBox.Save save按钮(保存)
  • QMessageBox.Cancel cancel按钮(取消)
  • QMessageBox.Close close按钮(关闭)
  • QMessageBox.Discard discard按钮(不保存)
  • QMessageBox.Apply apply按钮(应用)
  • QMessageBox.Reset reset按钮(重置)
  • QMessageBox.RestoreDefaults RestoreDefaults按钮(恢复默认值)
  • QMessageBox.Help help按钮(帮助)
  • QMessageBox.SaveAll saveall按钮(全部保存)
  • QMessageBox.Yes yes按钮(是)
  • QMessageBox.YesToAll YesToAll按钮(全部是)
  • QMessageBox.No No按钮(否)
  • QMessageBox.NoToAll NoToAll按钮(全部否)
  • QMessageBox.Abort Abort按钮(关于)
  • QMessageBox.Retry Retry按钮(重试)
  • QMessageBox.Ignore Ignore按钮(忽略)
  • QMessageBox.NoButton 无按钮

下面我们创建一个消息对话框,图标使用提问图标,窗口标题为 窗口标题,主提示语为 主提示语 按钮添加OK和取消

76.QMessageBox

76.QMessageBox

主提示语处可以使用富文本

76.QMessageBox

76.QMessageBox

1.2  设置对话框标题 setWindowTitle()

76.QMessageBox

父类中的方法,不测试了

1.3  图标设置

76.QMessageBox

1.3.1  标准图标 setIcon()

我们现在使用只传入父对象的构造函数

76.QMessageBox

此时的信息对话框是这个样子的

76.QMessageBox

现在我们加入一个信息图标

76.QMessageBox

76.QMessageBox

1.3.2  自定义图标 setIconPixmap()

我们现在把之前的气球图片放到里面

76.QMessageBox

76.QMessageBox

我们如果觉得太大了,我们可以对QPixmap进行修改

比如我们想搞成50*50像素的

76.QMessageBox

76.QMessageBox

1.4  设置主要标题 setText(str)

76.QMessageBox

76.QMessageBox

  • 主要标题接受写入html富文本字符串

我们也可以设置文本格式

76.QMessageBox

默认是Qt.AutoText这个就不测试了

1.5  提示文本

1.5.1  设置 setInformativeText(str)

我们就不取消之前的主要标题了

76.QMessageBox

76.QMessageBox

  • 提示文本接受写入html富文本字符串

1.5.2  获取 informativeText()

76.QMessageBox

76.QMessageBox

1.6  详细文本

1.6.1  设置 setDetailedText(self, str)

之前的标题我们就不取消了

76.QMessageBox

运行之后是这样的

76.QMessageBox

此时我们点击详细文本

76.QMessageBox

  • 详细文本不支持富文本

1.6.2  获取 detailedText()

76.QMessageBox

76.QMessageBox

1.7  复选框

1.7.1  设置 setCheckBox()

76.QMessageBox

76.QMessageBox

1.7.2  获取 checkBox()

76.QMessageBox

76.QMessageBox

2  按钮操作

2.1  添加按钮

有三种写法

76.QMessageBox

这里涉及到一个参数 QMessageBox.ButtonRole 该参数可以设置的值如下所示

76.QMessageBox

  • QMessageBox.InvalidRole 该按钮无效
  • QMessageBox.AcceptRole 确定
  • QMessageBox.RejectRole 取消
  • QMessageBox.DestructiveRole 不保存
  • QMessageBox.ActionRole 激活
  • QMessageBox.HelpRole 帮助
  • QMessageBox.YesRole 是
  • QMessageBox.NoRole 否
  • QMessageBox.ApplyRole 应用
  • QMessageBox.ResetRole 重置
  • 第一种写法 addButton(self, QAbstractButton, QMessageBox.ButtonRole)

设置一个自定义的按钮

76.QMessageBox

76.QMessageBox

点击完之后,直接关闭了对话框

这一种方法添加按钮后没有返回值

  • 第二种 addButton(self, str, QMessageBox.ButtonRole) -> QPushButton

添加一个指定角色的按钮,可以修改按钮上的标签

我们现在设置yes角色按钮,修改上面的文字信息为hello

这一种方法是有返回值的,所有我们可以这样写

76.QMessageBox

76.QMessageBox

  • addButton(self, QMessageBox.StandardButton) -> QPushButton

添加一个标准按钮,现在我们添加一个全部否的按钮

76.QMessageBox

76.QMessageBox

2.2  移除按钮 removeButton()

76.QMessageBox

我们使用刚刚添加的按钮进行测试

为了可以删除我把之前的按钮单独搞成一个变量

76.QMessageBox

当前的对话框是这样的

76.QMessageBox

我们现在去除这个按钮

76.QMessageBox

76.QMessageBox

上面另外两种添加方式直接把添加方式的返回值放入参数里就行了

2.3  标准按钮

76.QMessageBox

2.3.1  设置 setStandarButtons()

可以设置多个,我们现在设置应用和重置按钮

76.QMessageBox

76.QMessageBox

这两个按钮没设置功能之前是没有任何作用的

2.3.2  获取

2.3.2.1  获取单个按钮 standardButton()

我们使用之前创建的btn3作为参数

76.QMessageBox

76.QMessageBox

76.QMessageBox

如果在之前一起设置了多个标准按钮则会报错

2.3.2.2  获取所有按钮 standardButton()

76.QMessageBox

76.QMessageBox

2.4  默认按钮

当按钮被设置为默认按钮时,按钮会处于被选中状态

76.QMessageBox

2.4.1  设置 setDefaultButton()

我们当前有三个按钮,其中hello是默认按钮

76.QMessageBox

76.QMessageBox

设置默认按钮有两种写法

  • setDefaultButton(self,QPushButton)

我们现在打算设置No to All为默认按钮

76.QMessageBox

76.QMessageBox

76.QMessageBox

  • setDefaultButton(self,QMessageBox.StandardButton)

我们用另一种方式把No to All作为默认按钮

76.QMessageBox

76.QMessageBox

2.4.2  获取 defaultButton()

76.QMessageBox

76.QMessageBox

2.5  退出按钮

当按钮被设置为退出按钮,按ESC键会模拟点击这个按钮,并且下Esc后会关闭对话框

76.QMessageBox

为了让效果更明显,我们给设置了退出按钮的按钮加上一个槽函数

由于默认情况下,按下Esc会触发No To All按钮,所以我们这次取消not to all 按钮

76.QMessageBox

2.5.1  设置 setEscapeButton()

有两种写法

  • setEscapeButton(self,QAbstractButton)

76.QMessageBox

运行之后是这样的

76.QMessageBox

现在我们按下Esc按钮

窗口被关闭,信号触发

76.QMessageBox

  • setEscapeButton(self,QMessageBox.StandardButton)

我们此时再添加一个标准按钮

76.QMessageBox

然后将它设置为退出按钮

76.QMessageBox

之后再给一个槽函数

76.QMessageBox

运行之后是这样的

76.QMessageBox

我们此时按一下Esc

窗口被关闭,信号被触发

76.QMessageBox

2.5.2  获取 escapeButton()

76.QMessageBox

76.QMessageBox

2.6  获取按钮

76.QMessageBox

2.6.1  获取指定的标准按钮 button()

我们现在获取标准的保存按钮

76.QMessageBox

76.QMessageBox

2.6.2  获取所有的按钮 buttons()

76.QMessageBox

76.QMessageBox

76.QMessageBox

76.QMessageBox

当前一共有三个按钮,上面的返回信息本来是一行返回的,不好截取我就截成三行了

2.7  获取按钮角色 buttonRole()

76.QMessageBox

76.QMessageBox

76.QMessageBox

76.QMessageBox

2.8  获取被点击的按钮 clickedButton()

76.QMessageBox

我们使用信号 buttonClicked()来展示效果,当按钮被点击时触发这个信号

76.QMessageBox

运行之后是这样的

76.QMessageBox

我们现在点击一下save按钮

76.QMessageBox

3  信号 buttonClicked(QAbstractButton button)

当按钮被点击时触发这个信号

76.QMessageBox

它可以传递出被点击的按钮对象

76.QMessageBox

我们现在点击save按钮

76.QMessageBox

76.QMessageBox

4  文本交互

76.QMessageBox

这两个函数涉及到一个变量 Qt.TextInteractionFlags,可选的值如下

76.QMessageBox

  • Qt.NoTextInteraction 不与文本进行交互
  • Qt.TextSelectableByMouse 可被鼠标选中
  • Qt.TextSelectableByKeyboard 可使用文本光标操作
  • Qt.LinksAccessibleByMouse 可用鼠标激活链接
  • Qt.LinksAccessibleByKeyboard 可用键盘激活链接
  • Qt.TextEditable 文本可编辑
  • Qt.TextEditorInteraction 可用用光标文本操作,可用鼠标选中,可编辑
  • Qt.TextBrowserInteraction 可被鼠标选中,可用键盘或鼠标激活链接

这个在70.QLabel中1.9有讲过,在这里我们就举一个例子

我们首先设置一个主标题和副标题

76.QMessageBox

76.QMessageBox

我们此时点一下链接就可以打开链接

主要提示语没有办法交互

现在我们设置为文本可编辑

76.QMessageBox

我们现在可以编辑主文本,但是不能编辑副文本

76.QMessageBox

  • 方法setTextInteractionFlags()只作用于主文本

现在我们获取一下

76.QMessageBox

76.QMessageBox

5  静态方法

76.QMessageBox

5.1  QMessageBox.about()

参数如下所示

  • 父对象
  • 窗口标题
  • 主标题

76.QMessageBox

76.QMessageBox

返回值为None

76.QMessageBox

5.2  QMessageBox.aboutQt()

参数为:

  • 父对象
  • 窗口标题

76.QMessageBox

这个是Qt的一个介绍,可以设置窗口标题

76.QMessageBox

返回值为None

76.QMessageBox

5.3  QMessageBox.critical()

参数为

  • 父对象
  • 窗口标题
  • 主提示语
  • 一个或多个标准按钮
  • 默认按钮

76.QMessageBox

76.QMessageBox

返回值根据按下按钮的不同,返回不同的值

76.QMessageBox

5.4  QMessageBox.information()

参数为

  • 父对象
  • 窗口标题
  • 主提示语
  • 一个或多个标准按钮
  • 默认按钮

76.QMessageBox

76.QMessageBox

返回值根据按下按钮的不同,返回不同的值

76.QMessageBox

5.5  QMessageBox.question()

参数为

  • 父对象
  • 窗口标题
  • 主提示语
  • 一个或多个标准按钮
  • 默认按钮

76.QMessageBox

76.QMessageBox

返回值根据按下按钮的不同,返回不同的值

76.QMessageBox

5.6  QMessageBox.warning()

参数为

  • 父对象
  • 窗口标题
  • 主提示语
  • 一个或多个标准按钮
  • 默认按钮

76.QMessageBox

76.QMessageBox

返回值根据按下按钮的不同,返回不同的值

76.QMessageBox

5.3-5.6中的返回值如下

  • Abort = 262144
  • Apply = 33554432
  • Cancel = 4194304
  • Close = 2097152
  • Discard = 8388608
  • Help = 16777216
  • Ignore = 1048576
  • No = 65536
  • NoAll = 131072
  • NoToAll = 131072
  • Ok = 1024
  • Open = 8192
  • Reset = 67108864
  • RestoreDefaults = 134217728
  • Retry = 524288
  • Save = 2048
  • SaveAll = 4096
  • Yes = 16384
  • YesAll = 32768
上一篇:QT消息QMessageBox打开网址超链接


下一篇:QMessageBox::critical 严重警告错误对话框