如何避免QLineEdit的验证样式影响QToolTip的显示效果
问题原因
你直接为QLineEdit设置不带选择器的样式时,样式规则会默认继承给该控件的所有子元素(QToolTip属于QLineEdit的悬浮子控件),而Qt样式表的优先级规则中「控件自身设置的样式」优先级高于「全局设置的样式」,所以你全局加了!important的QToolTip样式也不会生效。
解决方案
只要在给QLineEdit设置样式时,明确指定样式仅作用于QLineEdit本身即可,修改你的验证逻辑代码:
def handleValidationChange(self, state): if state == QtGui.QValidator.Invalid: colour = 'white' elif state == QtGui.QValidator.Intermediate: colour = 'yellow' elif state == QtGui.QValidator.Acceptable: colour = 'lightgreen' # 增加QLineEdit选择器,限定样式只作用于输入框自身,不继承给子控件 self.nameLineEdit.setStyleSheet('QLineEdit {background-color: %s}' % colour) QtCore.QTimer.singleShot(5000, lambda: self.nameLineEdit.setStyleSheet(''))
如果仍有冲突,也可以在输入框的样式里直接指定Tooltip的样式,双重保险:
self.nameLineEdit.setStyleSheet(f''' QLineEdit {{background-color: {colour};}} QToolTip {{background-color: lightblue;}} ''')
修改后即可完全隔离输入框的验证样式和Tooltip的样式。
内容的提问来源于stack exchange,提问作者Patty Jula
相关产品推荐
相关产品推荐

