Qt之再谈阴影边框

前面就窗口阴影已经写过一篇博客,使用九宫格的思路实现的,在我看来,凡是用程序能实现的尽量不要使用图片代替(在保证效率的前提下),今天再次分享关于我的一些小见解!
    先看效果:
  Qt之再谈阴影边框
Qt之再谈阴影边框
    窗口阴影任意调节,包括阴影像素、是否圆角等。
    直接上代码:

void DropShadowWidget::paintEvent(QPaintEvent *event)
{
    QPainterPath path;
    path.setFillRule(Qt::WindingFill);
    path.addRect(10, 10,this->width()-20, this->height()-20);

    QPainterpainter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);
    painter.fillPath(path,QBrush(Qt::white));

    QColor color(0, 0, 0,50);
    for(int i=0; i<10;i++)
    {
        QPainterPath path;
        path.setFillRule(Qt::WindingFill);
        path.addRect(10-i, 10-i,this->width()-(10-i)*2, this->height()-(10-i)*2);
        color.setAlpha(150 - qSqrt(i)*50);
        painter.setPen(color);
        painter.drawPath(path);
    }
}
    记得加上这行代码: setAttribute(Qt::WA_TranslucentBackground)。保证不被绘制上的部分透明,关于这行代码在一些Qt版本中会有副作用,比如:最小化后窗体子组件失去焦点等问题。具体可以看Qt的这个Bug( Widget with Qt::FramelessWindowHint andQt::WA_TranslucentBackground stops painting afterminimize/restore)。
    也许有人会遇到,因为我之前一直使用的是VS集成Qt5插件(非OpenGL版本),一直存在这个问题,寻找各方面资料无果(真的很久,搞不夸张的说大半年应该是有的)。最后改换OpenGL版本的居然好了。。。问题的解决方式太过于诡异,真让人哭笑不得。在此记过,希望对后来人有帮助。
Qt之再谈阴影边框
   
   为子部件添加阴影比较简单,使用如下方式:
QGraphicsDropShadowEffect*shadow_effect = new QGraphicsDropShadowEffect(this);
shadow_effect->setOffset(-5, 5);
shadow_effect->setColor(Qt::gray);
shadow_effect->setBlurRadius(8);
network_group_box->setGraphicsEffect(shadow_effect);

效果如下:
Qt之再谈阴影边框

更多参考:

注:
   技术在于交流、沟通,转载请注明出处并保持作品的完整性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值