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