删除QComboBox listView阴影效果

时间:2015-01-02 08:46:29

标签: qt qt4 qcombobox

默认情况下,QComboBox列表视图具有阴影效果。有没有办法删除它?阴影是由QStyle控制还是以其他方式控制?

qcombobox shadow

2 个答案:

答案 0 :(得分:4)

阴影效果不是Qt特定的东西,它是桌面主题特定的东西。阴影取决于桌面环境使用的样式/主题。如果你的样式/主题定义QComboBox的阴影,那么Qt会非常迅速地绘制它。也就是说,您可以搜索不会绘制阴影的样式。我这样做了效果:

cb = QComboBox()
cb.addItems( [ '1', '2', '3', '4', '5', '6' ] )
cb.setStyle( QStyleFactory.create( "Polyester" ) )
cb.setStyleSheet( "QComboBox QAbstractItemView { border: 1 px solid gray; }" )
cb.show()

为此,您必须具有QStyleFactory.keys()列出的聚酯等兼容主题。我尝试了时髦的Breeze风格和着名的QtCurve风格,但他们总是画出一个影子。您可以使用GTK+Cleanlooks样式实现相同的目标。

仅供参考:聚酯是KDE附带的风格之一。

以下是上述代码的屏幕截图:

enter image description here

答案 1 :(得分:0)

好的,这可能适用于那些没有阴影效果但有阴影效果的主题,所以我终于找到了一种使它起作用的简单方法。

self.comboBox.findChild(QFrame).setWindowFlags(Qt.Popup | Qt.NoDropShadowWindowHint)

combobox内部有一个QFrame。其窗口效果使阴影。 我们可以使用上述代码消除这种影响。 小心,不要同时放两个,否则您将不会打开弹出窗口。

我知道这篇文章发表已经有一段时间了,但是我没有找到其他解决方案。