使用Qt样式表和QMenu ::指标

时间:2012-08-15 20:39:12

标签: python qt pyqt stylesheet

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

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

QMenu {
    background-color: "#242424"; 
    color: "#D5D5D5";
}

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

QMenu::indicator {
    background-color: "#242424"; 
}

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

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

2 个答案:

答案 0 :(得分:1)

如果这就是你所做的一切,我会使用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

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

答案 1 :(得分:1)

我找到了Qt如何处理QMenu ::指标样式表的documented bug的解决方法。

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

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

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