去除 QComboBox 控件下拉列表的阴影效果

6

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

qcombobox shadow

默认情况下,QComboBox下拉列表具有阴影效果。有没有办法去掉它?阴影是由QStyle控制还是以其他方式控制的?
2个回答

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()列出的polyester主题。我尝试了时尚的Breeze样式和著名的QtCurve样式,但它们总是绘制阴影。您可以使用GTK+Cleanlooks样式来实现相同的效果。
FYI:Polyester是KDE附带的样式之一。
以下是上述代码的屏幕截图:enter image description here

谢谢马库斯,让我试试看。 - Kishore Ravikumar

1

好的,这可能适用于没有阴影效果的主题,但我有它们,因此我最终找到了一个简单的方法使其工作。

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

combobox里面有一个QFrame。它的窗口效果会产生阴影。 我们可以用上述代码来消除这种效果。 注意,不要同时使用两个,否则你将无法打开弹出窗口。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接