【问题标题】:Remove QComboBox listView shadow effect去除 QComboBox listView 阴影效果
【发布时间】:2015-01-02 08:46:29
【问题描述】:

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

【问题讨论】:

    标签: qt qt4 qcombobox


    【解决方案1】:

    阴影效果不是 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 附带的样式之一。

    这是上面代码的截图:

    【讨论】:

    • 谢谢马库斯,让我试试
    【解决方案2】:

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

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

    combobox 内部有一个 QFrame。它的窗口效果使阴影。 我们可以用上述行消除这种影响。 注意,不要两个都放,否则打不开弹窗。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多