2

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

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

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

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

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

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

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

4

2 回答 2

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

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

于 2012-08-21T17:19:16.347 回答
1

我找到了一种解决方法,该解决方法似乎是Qt 如何处理 QMenu::indicators 样式表的记录错误。

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

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

QMenu::indicator:checked {
    background-image: url(/path/to/image.png);
}
于 2013-02-06T01:17:35.283 回答