【问题标题】:How to customize the titlebar of a QMdiSubWindow with qss?如何使用 qss 自定义 QMdiSubWindow 的标题栏?
【发布时间】:2011-01-09 13:36:44
【问题描述】:

我想自定义 QMdiSubWindow 的标题栏。 为此,我使用 qss。

QMdiSubWindow { border: 1px solid #000000; background: #000000 }
QMdiSubWindow:title { background: #000000 }

问题是当应用这个 qss 时,窗口图标消失了。 我知道可以在 qss 中为 QDockWidget 定义这些图标

QDockWidget { ... titlebar-close-icon: url(myCloseIcon.png); ... }

但是我找不到为 QMdiSubWindow 定义它的方法。 或许这种方式并不存在。 不知道有没有可能?

【问题讨论】:

  • 这是多年以来的问题。是否有任何解决方法来设置 MDI 子项的样式?

标签: qt stylesheet mdichild


【解决方案1】:

截至Qt 5.2 你不能;尚未检查 5.3,但 AFAIK 他们没有更改 5.3 版本中的 QMdiArea/QMdiSubWindow 中的任何内容。

您拥有的最简单的解决方案是使用QCommonStyle 并使用QPainter 绘制标题栏。有关这方面的更多信息,请参阅 QCommonStyleQStyle 文档。请注意,建议为您的样式类派生QCommonStyle 而不是QStyleQCommonStyle 继承 QStyle 所以你不会丢失任何东西。

如果你想实现更复杂的效果,比如子窗口上的阴影,那么你剩下的唯一选择就是派生QMdiSubWindowQMdiArea,在QMdiSubWindow派生类上调用QWidget::setWindowFlags(Qt::FramelessWindowHintflag)并使用您自己的标题栏从头开始实现您自己的子窗口。然后,您可以定义您自己的 QColor 类型的 Q_PROPERTYs 并从 QSS 访问那些像暴露的 here 以便从 QSS 自定义标题栏颜色。

另一种选择是从头开始创建一个新的 MDI 区域小部件,但我认为这不适用于您的情况。如果您只需要使用自定义样式自定义标题栏是您可以解决的最佳方法。如果有问题的示例可以作为本文的编辑提供。

但如果您想仅使用 QSS 自定义标准 QMdiSubWindow,很遗憾,目前还无法实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2019-01-05
    • 2011-03-10
    • 2023-03-13
    相关资源
    最近更新 更多