样式化 QLineEdit 的背景颜色闪烁

Posted

技术标签:

【中文标题】样式化 QLineEdit 的背景颜色闪烁【英文标题】:Background color of styled QLineEdit flickers 【发布时间】:2014-07-14 18:01:25 【问题描述】:

当使用样式表设置QLineEditbackground-color 时,鼠标悬停在控件上时会出现非常明显的闪烁。示例代码:

QLineEdit* flicker = new QLineEdit(this);
flicker->setStyleSheet("QLineEdit background: red;");
flicker->show();

只有在 Windows Vista 和更高版本上运行时才会发生这种情况,而不是在 XP 中。我认为这与 Windows(Aero?)应用程序的默认样式有关,因为将样式设置为 QStyle::Fusion 可以解决问题:

QLineEdit* flicker = new QLineEdit(this);
QStyle* fusion = QStyleFactory::create(QString("Fusion"));
flicker->setStyle(fusion);
flicker->setStyleSheet("QLineEdit background: red;");
flicker->show();

编辑: 我还设置了eventfilter,以便在鼠标悬停时重新绘制控件,并且调试器正在确认立即调用该控件。

【问题讨论】:

您确实需要发布一个重现问题的完整示例。可以在没有其他任何东西的情况下编译的单个文件。到目前为止,如果没有您损坏的鼠标悬停代码,我无法重现它。 你到底在问什么?如何解决闪烁问题? 是的,我想知道如何解决闪烁问题。 @KubaOber:即使没有鼠标悬停代码,也会发生闪烁。只需设置样式表就足以使问题发生(至少在我的机器上)。 这种方法看起来比较稳定。尽管 LineEdit 中添加了其他功能,例如圆角。 【参考方案1】:

遇到了同样的问题,想分享一个可能的解决方法:

QLineEdit 在鼠标悬停时闪烁的原因可能是另一个样式表用于“QLineEdit:hover...”,它仍然包含默认值。不幸的是,添加“QLineEdit:hoverbackground-color:red”似乎还不够。到目前为止,我发现它可以正常工作的唯一方法是使用

flicker->setStyleSheet("QLineEditbackground-color: red; QLineEdit:hoverborder: 1px solid gray; background-color red;");

不太清楚为什么需要显式设置边框属性,但它对我有用。

【讨论】:

作为参考:我在 Qt 的 JIRA 中为任何感兴趣的人创建了一个错误报告,因为这不应该是“正常”行为:bugreports.qt-project.org/browse/QTBUG-42575 这个解决方案仍然给我带来了问题。如果我在光标在 LineEdit 顶部 时设置属性(例如使用 on_lineEdit_textChanged()),LineEdit 将至少闪烁一次。 作为参考,使用新的 Qt 错误报告平台,链接现在是 bugreports.qt.io/browse/QTBUG-42575【参考方案2】:

我也遇到过类似的问题,通过给 QLineEdit 添加边框解决了,像这样:

#dont_flick_lineedit
    background-color: red;
    border: 1px solid #CCC;

#flick_lineedit
    background-color: blue;

【讨论】:

以上是关于样式化 QLineEdit 的背景颜色闪烁的主要内容,如果未能解决你的问题,请参考以下文章

bootstrap中语义化标签字体风格文本布局列表排列特殊字体颜色及特殊背景颜色

闪烁标记背景的颜色与预期不同

以编程方式“闪烁” UITableViewCell 将背景颜色设置为白色

尝试简单的 QPushButton 背景颜色更改 [重复]

qtcombobox的背景颜色越过下拉

qt creator左侧和下边控制台背景颜色怎么改?