2012-08-15 110 views
2

我使用样式表来定制我的Qt应用程序之一的外观(实际上PyQt的,但完全一样)。使用Qt样式表与QMenu ::指标

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

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

如果我设置的指示器背景颜色,背景指示器的中心被正确着色,但有围绕中心广场的大型边框是仍然方格和检查停止出现。

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

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

有没有人有试图定制QMenus的颜色和外观类似的问题?你是如何解决它们的?

+0

哟伙计 - 怎么一回事呢?我有一些这样的例子,但我现在正在手机上...只是想发表评论,所以我不会忘记 – 2012-08-18 02:55:03

回答

1

我找到了一个解决方法似乎是Qt中如何处理样式为QMenu ::指标documented bug

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

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

QMenu::indicator:checked { 
    background-image: url(/path/to/image.png); 
} 
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

我复制高级定制一个和调整所有的值,而不是真正删除任何人,因为其所有的纸牌做的房子。

+0

啊,很酷,我不知道你可以在样式表中使用调色板标记。是的,我的样式表非常广泛。我发现使用样式表来设置样式,如悬停,切换,选择等等更容易,我可以将样式表从应用程序传输到应用程序以获得一致的外观。但我认为,因为样式表系统更新,它仍然有一些错误需要解决。就像这个问题一样,我仍然没有找到解决方法,另外一个问题是禁用的小部件不尊重样式表中的字体属性,但至少这是一个已知问题。 – 2012-08-27 20:39:27