风格QLineEdit的背景颜色闪烁

时间:2014-07-14 18:01:26

标签: c++ windows qt qt5

使用样式表设置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,以便在鼠标悬停时重新控制控件,并且调试器确认会立即调用它。

2 个答案:

答案 0 :(得分:3)

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

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

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

不太确定为什么需要明确设置border属性,但它对我有用。

答案 1 :(得分:1)

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

if