Qt窗口实现圆角阴影效果

相比于html等网页绘图,可能QT实现透明圆角比较麻烦一些。首先我们需要,做一个嵌套的QWidget,UI效果如下,两个QWidget之间有一定的margin:

Qt窗口实现圆角阴影效果_第1张图片

设置了嵌套的QWidget之后,我们将外层的QWidget设置为透明,然后内层的QWidget样式设置为圆角阴影。

//主要方法是嵌套widget外层的widget设置为透明
//然后内层的widget设置对应的border圆角
//之后再在内层的widget中设置阴影
#include 
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //设置窗口为无边框窗口且显示在最上层
	//在任务栏上不显示图标
    setWindowFlags(Qt::FramelessWindowHint|Qt::Tool|Qt::WindowStaysOnTopHint);

    //外层窗口显示为透明
    setAttribute(Qt::WA_TranslucentBackground,true);

    //内层窗口添加对应的阴影效果
    QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffect(this);
    shadow_effect->setOffset(0, 0);
    shadow_effect->setColor(QColor(150,150,150));
    shadow_effect->setBlurRadius(6);
    ui->inner_widget->setGraphicsEffect(shadow_effect);
   
     //设置内层QWidget的边框和背景颜色
    ui->inner_widget->setStyleSheet("QWidget#inner_widget{border:1px solid #FFFFFF;border-radius:7px;background-color:#FFFFFFS;}");
}

运行的效果如下图所示:

Qt窗口实现圆角阴影效果_第2张图片 

你可能感兴趣的:(QT,c++,qt,经验分享)