QT 控件阴影效果

在做项目的时候,为了美化界面,我们通常需要设置控件具有阴影效果,具体怎么做呢?

方法一:使用QGraphicsDropShadowEffect

    this->setWindowFlags(Qt::FramelessWindowHint);
    QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect;
    effect->setBlurRadius(8);        // 阴影圆角的大小
    effect->setColor(Qt::gray);      //阴影的颜色
    effect->setOffset(5,5);          //阴影的偏移量
    ui->centralWidget->setGraphicsEffect(effect); //给那个控件设置阴影,这里需要注意的是所有此控件的子控件,也都继承这个阴影。

方法二:重写paintEvent 函数

void MainWindow::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);
    }
}
使用此方法,需要添加下面代码,保证不被绘制上的部分透明。
setAttribute(Qt::WA_TranslucentBackground)
方法三:使用带有阴影效果的图片。


猜你喜欢

转载自blog.csdn.net/xiezhongyuan07/article/details/80195330