QT无边框圆角窗体的实现

461 阅读1分钟

废话不多说先上图 在这里插入图片描述上代码

 setWindowFlags(Qt::FramelessWindowHint);     //隐藏窗体标题栏
    setAttribute(Qt::WA_TranslucentBackground);  //设置窗体透明度
    effect = new QGraphicsDropShadowEffect;    //绘制窗体阴影
    effect->setOffset(4,4);
    effect->setOffset(6,6);
    effect->setColor(QColor(0,0,0,150));
    effect->setBlurRadius(10);
    ui->mainwindow_fre_main->setGraphicsEffect(effect);  //原生窗体已设为透明,此处绘制QFrame的阴影来显示

敲重点,布局文件和QFrame有这么几个属性,如果此处没有将这几个属性设置为0,布局器和QFrame内的控件总会和父容器有一定的间隙,看着很割裂,我搜遍全网几乎没人提到这几个属性。 在这里插入图片描述 在这几个属性设置为0以后QFrame和布局其内的控件就可以撑满父容器,没有一点间隙,当然对于一些有边框的容器还是会有1px的间隙,但控件本身的,可以通过设置属性隐藏。 最外层的布局其要注意一下,因为主窗体已经设为透明了,所以最外层的布局器要留下一定的宽度来显示阴影,阴影就绘制在最外层布局器里面装的那个Frame上。