很多时候为了提升UI的交互友好性,我们需要增加控件的悬浮样式,但是通过下面的QSS样式配置悬浮样式的时候,会出现悬浮样式不生效的问题。
CustomWidget:hover
{
border:2px solid #017BC9;
background-color:#FFFFFF;
}
这是因为在QWidget的绘制事件中默认没有对悬浮样式进行绘制的原因,所以我们只需要在paintEvent()中添加对应的绘制代码就可以了。
void CustomWidget::paintEvent(QPaintEvent *event)
{
QStyleOption opt;
opt.initFrom(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
还有在一些特殊的需求中,我们需要捕获控件的悬浮事件做一些事情,这就要求我们对控件的事件循环进行处理,然后捕获到对应的悬浮事件发送到对应的业务中。
控件开启悬浮事件需要在头文件中声明各种窗口悬浮事件,并在事件消息响应中拦截悬浮消息并对对应的消息进行处理。
首先开启控件的悬浮事件开关。
//QWidget需要设置hover属性才能支持hover事件
this->setAttribute(Qt::WA_Hover);
在头文件中声明事件对应的接口
protected:
bool event(QEvent * e);
//悬浮进入事件
void hoverEnter(QHoverEv