【问题标题】:Subclassing QMessageBox子类化 QMessageBox
【发布时间】:2012-09-07 10:55:58
【问题描述】:

我需要自定义 QMessageBox。我需要删除框架和标题栏并添加我自己的标题栏和关闭按钮。还需要更换标准按钮并可能重做框的背景颜色。

是否可以对其进行子类化并实现上述目标?这有什么例子吗?或者,我应该只继承 Dialog 并创建自己的消息框吗?

【问题讨论】:

    标签: qt qmessagebox


    【解决方案1】:

    This tutorial on custom windows might help you. 是法语,但代码示例是英语,它展示了如何编写自己的标题栏,创建一个窗口并在其上附加新的标题栏。我以前也经历过,做过之后就很简单了。

    【讨论】:

      【解决方案2】:

      没有必要继承 QMessageBox 或 QDialog。您可以将参数Qt::FramelessWindowHint 传递给QMessageBox 以删除框架和按钮。您还可以使用Qt Style Sheets 来设置 QMessageBox 的背景以及按钮的样式。这样的事情应该可以工作:

      msgBox->setStyleSheet("QDialog {background-color: red;}"
                            "QPushButton {background-color: blue;}")
      

      我尚未对此进行测试,但它应该可以工作或非常接近。

      【讨论】:

      • 我需要删除窗口管理器的标题栏,但需要自己的一个。我正在使用this 创建自己的标题栏,但是如何将其插入到消息框的布局中?
      • @go4sri 您可以使用 QWidget::layout() 获取对话框的布局,然后在顶部(即索引 0)插入新的标题栏。我认为这会做到:msgBox->layout()->insertWidget(0, titleBarWidget);。您可能需要将布局静态转换为任何类型的布局(可能是 QBoxLayout)。您还可以使用 QVBoxLayout 创建一个新的 QWidget 并使用 addWidget() 添加标题栏,然后再次添加消息框。不确定这是否可行。
      猜你喜欢
      • 1970-01-01
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-30
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多