窗口闪烁&QWidget多窗口鼠标透传&QWidget底色设置

6 篇文章 1 订阅

工作中为了实现主窗口的醒目提示,需要使用叠加窗口,但是蒙板会阻止鼠标事件的向下传递,因此查找资料,发现有如下三种方法进行实现: 

// 1.通过设置Mask实现
QWidget::setMask(QRegion(childrenRegion()));

// 2.通过设置鼠标透传标志实现
setAttribute(Qt::WA_TransparentForMouseEvents, true);

// 3.通过设置透明窗口实现
setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
setAttribute(Qt::WA_TranslucentBackground, true);

给QWidget设置了stylesheet后,发现并不起作用,有人说可以换成QFrame来进行底色设置。经过一番折腾,发现如下二种方式设置后,可以进行底色设置: 

// way1. Set Flag: Indicates the widget should be drawn using a styled background.
setAttribute(Qt::WA_StyledBackground);

// way2. Use paintEvent
void BorderFlicker::paintEvent(QPaintEvent *)
{
    QStyleOption opt;
    opt.initFrom(this);
    QPainter p(this);
    style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}

由于作者要做的是窗口闪烁,故最后选择的代码搭配如下(简单好用):

// 设置鼠标透传
setAttribute(Qt::WA_TransparentForMouseEvents,true);

// 设置使用stylesheet来设置背景
setAttribute(Qt::WA_StyledBackground);

窗口闪烁主要是通过设置border的渐变stylesheet来实现的,可以看下最终效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值