样式化的 QLineEdit 闪烁的背景颜色

Background color of styled QLineEdit flickers

提问人:Ernest3.14 提问时间:7/15/2014 最后编辑:Ernest3.14 更新时间:4/8/2016 访问量:2095

问:

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

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

C++ Windows QT QT5

评论

0赞 Kuba hasn't forgotten Monica 7/16/2014
您确实需要发布一个完整的示例来重现该问题。可以编译的单文件,无需其他任何内容。到目前为止,如果没有您损坏的鼠标悬停代码,我无法重现它。
0赞 hyde 7/18/2014
你到底在问什么?如何解决闪烁?
0赞 Ernest3.14 7/22/2014
是的,我想知道如何修复闪烁。@KubaOber :即使没有鼠标悬停代码,也会发生闪烁。仅仅设置样式表就足以使问题发生(至少在我的机器上)。
0赞 A. Vieira 3/23/2016
这种方法似乎更稳定。尽管其他功能已添加到 LineEdit,例如圆角。

答:

4赞 Robert 11/11/2014 #1

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

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

flicker->setStyleSheet("QLineEdit{background-color: red;} QLineEdit:hover{border: 1px solid gray; background-color red;}");

不太确定为什么需要显式设置边界属性,但它对我有用。

评论

2赞 Robert 11/12/2014
作为参考:我已经在Qt的JIRA中为任何感兴趣的人创建了一个错误报告,因为这不应该是“正常”行为:bugreports.qt-project.org/browse/QTBUG-42575
0赞 A. Vieira 3/23/2016
这个解决方案仍然给我带来问题。如果我在光标位于 LineEdit 顶部时设置该属性(例如使用 on_lineEdit_textChanged()),则 LineEdit 将至少闪烁一次。
1赞 Ernest3.14 4/1/2016
作为参考,有了新的Qt错误报告平台,链接现在 bugreports.qt.io/browse/QTBUG-42575
1赞 cleybertandre 4/6/2016 #2

我遇到了类似的问题,并通过向QLineEdit添加边框来解决它,如下所示:

#dont_flick_lineedit{
    background-color: red;
    border: 1px solid #CCC;
}
#flick_lineedit{
    background-color: blue;
}