【发布时间】:2015-01-02 08:46:29
【问题描述】:
默认情况下,QComboBox 列表视图具有阴影效果。有没有办法删除它?阴影是由QStyle 控制还是以其他方式控制?
【问题讨论】:
默认情况下,QComboBox 列表视图具有阴影效果。有没有办法删除它?阴影是由QStyle 控制还是以其他方式控制?
【问题讨论】:
阴影效果不是 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 附带的样式之一。
这是上面代码的截图:
【讨论】:
好吧,这可能适用于那些有没有阴影效果的主题但我有它们的人,所以我终于找到了一种简单的方法来让它工作。
self.comboBox.findChild(QFrame).setWindowFlags(Qt.Popup | Qt.NoDropShadowWindowHint)
combobox 内部有一个 QFrame。它的窗口效果使阴影。 我们可以用上述行消除这种影响。 注意,不要两个都放,否则打不开弹窗。
我知道这篇文章发布已经有一段时间了,但我还没有找到任何其他解决方案。
【讨论】: