Remove QComboBox listView shadow effect

后端 未结 2 560
滥情空心
滥情空心 2021-01-18 18:24

By default, the QComboBox listview has shadow effect. Is there a way to remove it? Is the shadow controlled from QStyle or in some other way?

相关标签:
2条回答
  • 2021-01-18 18:45

    The shadow effect is not a Qt specific thing, its a Desktop theme specific thing. The shadow depends on the style/theme your desktop environment is using. If your style/theme defines shadows for QComboBox then Qt will very promptly draw it. That said, you may search for a style that does not draw a shadow. I got the effect by doing so:

    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()
    

    For this, you must have a compatible theme like polyester listed by QStyleFactory.keys(). I tried with the snazzy Breeze style and the famous QtCurve style, but they draws a shadow always. You may achieve the same using GTK+ and the Cleanlooks styles.

    FYI: Polyester is one of the styles that comes with KDE.

    Here is a screenshot of the above code:

    enter image description here

    0 讨论(0)
  • 2021-01-18 18:58

    Okay, that might be working for someone who has themes without shadow effects but I have them, so I finally found a simple way to make it work.

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

    combobox has one QFrame inside. Its window effect makes the shadow. We can erase that effect with the aforementioned line. Careful, don't put both, otherwise you won't open the popup.

    I know it's been a while since this post was made but I haven't found any other solutions.

    0 讨论(0)
提交回复
热议问题