【发布时间】:2012-09-07 10:55:58
【问题描述】:
我需要自定义 QMessageBox。我需要删除框架和标题栏并添加我自己的标题栏和关闭按钮。还需要更换标准按钮并可能重做框的背景颜色。
是否可以对其进行子类化并实现上述目标?这有什么例子吗?或者,我应该只继承 Dialog 并创建自己的消息框吗?
【问题讨论】:
标签: qt qmessagebox
我需要自定义 QMessageBox。我需要删除框架和标题栏并添加我自己的标题栏和关闭按钮。还需要更换标准按钮并可能重做框的背景颜色。
是否可以对其进行子类化并实现上述目标?这有什么例子吗?或者,我应该只继承 Dialog 并创建自己的消息框吗?
【问题讨论】:
标签: qt qmessagebox
This tutorial on custom windows might help you. 是法语,但代码示例是英语,它展示了如何编写自己的标题栏,创建一个窗口并在其上附加新的标题栏。我以前也经历过,做过之后就很简单了。
【讨论】:
没有必要继承 QMessageBox 或 QDialog。您可以将参数Qt::FramelessWindowHint 传递给QMessageBox 以删除框架和按钮。您还可以使用Qt Style Sheets 来设置 QMessageBox 的背景以及按钮的样式。这样的事情应该可以工作:
msgBox->setStyleSheet("QDialog {background-color: red;}"
"QPushButton {background-color: blue;}")
我尚未对此进行测试,但它应该可以工作或非常接近。
【讨论】:
msgBox->layout()->insertWidget(0, titleBarWidget);。您可能需要将布局静态转换为任何类型的布局(可能是 QBoxLayout)。您还可以使用 QVBoxLayout 创建一个新的 QWidget 并使用 addWidget() 添加标题栏,然后再次添加消息框。不确定这是否可行。