【问题标题】:Using Qt stylesheets with QMenu::indicator将 Qt 样式表与 QMenu::indicator 一起使用
【发布时间】:2012-08-12 04:43:54
【问题描述】:

我正在使用样式表来自定义我的一个 Qt 应用程序的外观(实际上是 pyqt,但完全相同)。

这是我用于 QMenu 的样式表代码。它正确地为我所有的 QMenu 着色,但它也会导致我的所有指示器(选中的 QMenu 项)具有方格背景,就好像它们是透明的一样。

QMenu { 背景颜色:“#242424”; 颜色:“#D5D5D5”; }

如果我在指示器上设置背景颜色,指示器背景的中心颜色正确,但中心正方形周围有一个大边框,仍然是格子,并且格子停止出现。

QMenu::indicator { 背景颜色:“#242424”; }

我还注意到文档示例中显示的宽度和高度属性不起作用。

有没有人在尝试自定义 QMenus 的颜色和外观时遇到过类似的问题?你是怎么解决的?

【问题讨论】:

  • 哥们儿——怎么样?我有一些例子,但我现在在我的手机上......只是想发表评论,所以我不会忘记

标签: python qt pyqt stylesheet


【解决方案1】:

在 Qt 如何处理 QMenu::indicators 的样式表时,我发现了一个似乎是 documented bug 的解决方法。

我没有使用image 属性,而是使用background-image 属性,它以原始大小插入图像,而不是缩小图像。仍然无法设置指示器的大小,但您可以使用padding 属性将菜单项文本移到上方,以便显示整个指示器图像。

QMenu::item {
    padding: 3px 20px;
}

QMenu::indicator:checked {
    background-image: url(/path/to/image.png);
}

【讨论】:

  • 已记录错误的链接已损坏
  • @AKludges 谢谢。看起来他们切换了错误跟踪器。刚刚更新了链接
【解决方案2】:

如果这就是你所做的一切,我会改用 QPalette 来驱动你的颜色。但是,如果这只是冰山一角,并且您正在寻找更多的样式定制,您必须定义几乎所有的属性(可以在 Qt 文档中找到)。无论出于何种原因,Qt 似乎都没有对其样式表进行继承,所以如果您甚至尝试在菜单上做圆角之类的事情,您也必须定义所有其他属性。

另外,我在文档中没有真正看到的一件好事是,如果您想修改样式表但仍然可以访问调色板颜色,您可以在样式表中使用调色板(ColorRole),例如所以:

QMenu {
    background-color: palette(Window);
}

无论如何...这里有一些选择:

QPalette 解决方案

menu = QMenu(self)
palette = menu.palette()
palette.setColor(menu.backgroundRole(), QColor('#242424'))
menu.setPalette(palette)

样式表解决方案

http://doc.qt.nokia.com/4.7-snapshot/stylesheet-examples.html#customizing-qmenu

我会复制高级自定义项并调整所有值,而不是真正删除它们中的任何一个,因为它都是纸牌屋。

【讨论】:

  • 啊,太棒了,我不知道您可以在样式表中使用调色板标记。是的,我的样式表非常广泛。我发现使用样式表为悬停、切换、选择等设置样式要容易得多,而且我可以将样式表从应用程序转移到应用程序以获得一致的外观。但我认为由于样式表系统较新,它仍然有一些错误需要解决。就像这个问题一样,我仍然没有找到解决方法,另一个问题是禁用的小部件不尊重样式表中的字体属性,但至少这是一个已知问题。
猜你喜欢
  • 1970-01-01
  • 2013-10-08
  • 2023-03-16
  • 2011-09-25
  • 1970-01-01
  • 2017-08-11
  • 2023-03-30
  • 2014-10-08
  • 2021-10-03
相关资源
最近更新 更多