Qt自定义对话框中边框阴影实现

    1. 对于Window系统或者Unix系统,QDialog有一个默认的边框(样式看起来有点复古),不过Qt可以提供自定义的边框设计,通过设置对话框相关属性:

setWindowFlags(Qt::Dialog | Qt:: FramelessWindowHint);  //设置不适应默认边框
setAttribute(Qt::WA_TranslucentBackground);             //设置半透明的背景

   2. 设计一个layout容器,放置相关的控件:

QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->setMargin(0);
QFrame *contentFrame = new QFrame(this);   //添加相关组件
mainLayout->addWidget(contentFrame);

QGraphicsDropShadowEffect *effect = new QGraphicsDropShadowEffect(this);  //添加阴影
effect->setOffset(2,2);
effect->setColor(QColor("#A5A6A5"));
effect->setBlurRadius(5);
m_contentFrame->setGraphicsEffect(effect);

setContentsMargins(0, 0, 5, 5);    //在下面和右边添加阴影

  3.如果还需要设置阴影部分的其他效果(添加相关细线),可以重写相关PaintEvent函数

void paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);

    QColor color(165, 165, 165);
    for (int i = 0; i < 5; i++) {
        color.setAlpha(200 - 100 *sqrt(i));
        painter.setPen(QPen(color, 1 * sqrt(i + 0.1)));
        painter.drawLine(geometry().x() + 1, height() - (4 -i),
                        width() -(4 - i), height() - (4 - i));
        painter.drawLine(width() - (4 - i), geometry().y() + 1,
                        width() - (4 - i), height() - (4 - i));
    }
        
}

4. 设计效果图:

发布了83 篇原创文章 · 获赞 34 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xx18030637774/article/details/104873415