ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Qt添加窗口边框阴影

2021-05-06 16:35:34  阅读:217  来源: 互联网

标签:10 窗口边框 Qt effect 添加 path shadow painter


 

转载于:https://www.cnblogs.com/SaveDictator/articles/7497462.html

将边框四周添加阴影效果,除了 通过PS这种非常规手段外,还有两种方法(欢迎补充)。实现效果如下:

 

方法一:通过QFrame + QGraphicsDropShadowEffect方式

复制代码
QFrame *frame = new QFrame(this);
frame->setStyleSheet("QFrame{border-radius:10px}"); //设置圆角与背景透明
frame->setGeometry(5, 5, this->width() - 5, this->height() - 5);//设置有效范围框
QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this);
shadow_effect->setOffset(0, 0);
shadow_effect->setColor(Qt::black);
shadow_effect->setBlurRadius(10);
frame->setGraphicsEffect(shadow_effect);
//...
this->setAttribute(Qt::WA_TranslucentBackground);//特别注意这句
//如果发现没有效果,那可能你设置了底层布局的问题。因为你可能设置了底层布局setContentsMargins的关系,如是,调整这个函数的参数即可
复制代码

 

方法二。通过paintEvent()函数

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

    QPainter painter(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);
    }
}

//仍然要设置主窗体的背景透明
复制代码

ps:这两种方法,都需要注意两点。其一是设置主窗体的背景透明this->setAttribute(Qt::WA_TranslucentBackground);其二是注意阴影的尺寸

标签:10,窗口边框,Qt,effect,添加,path,shadow,painter
来源: https://www.cnblogs.com/tingtaishou/p/14735732.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有