提问人:Ernest3.14 提问时间:7/15/2014 最后编辑:Ernest3.14 更新时间:4/8/2016 访问量:2095
样式化的 QLineEdit 闪烁的背景颜色
Background color of styled QLineEdit flickers
问:
当设置使用样式表时,将鼠标悬停在控件上时会有非常明显的闪烁。示例代码:background-color
QLineEdit
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
答:
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;
}
评论