Qt 已有窗體快速簡單實現四周陰影

發現一篇好文,利用 QGraphicsDropShadowEffect 可快速給原先沒有陰影的窗口加上陰影,快速方便,不費勁。

原文地址:https://blog.csdn.net/tonny7501/article/details/81748294

之前在網上找了很多資料來實現無邊框窗口的陰影, 發現不是複雜就是效果不好, 比如圖片形式, 只要擴大質量就會嚴重失真, 會弄瘋我們這些強迫症的, 利用純代碼繪畫出陰影, 絕對不適合新手和沒有繪畫細胞的我們, 既然Qt自帶陰影效果, 幹嘛不直接用呢? 話不多說, 開擼!

實現原理:
QWidget互相嵌套, 以一個窗口QWidget作爲陰影的畫板, 嵌套QWidget設置陰影(是不是特別簡單呢?)

步驟:

  • 第一步, 先按照如圖自己在 ui 界面創建對應 widget, 並進行垂直佈局, 佈局器更名:lay_bg

就是在原有的佈局最外層加一個背景 QWidget(如果原有的窗體本來就有無需另外創建),然後這個背景 QWidget 就屬於 lay_bg 中唯一的控件。
在這裏插入圖片描述

  • 第二步: 寫陰影
    //陰影類包含頭文件
     #include <QGraphicsDropShadowEffect>
     
    //窗體構造函數中
    BgWidget::BgWidget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::BgWidget)
    {
        ui->setupUi(this);
        //設置窗體透明
        this->setAttribute(Qt::WA_TranslucentBackground, true);
        //設置無邊框
        this->setWindowFlags(Qt::Window | Qt::FramelessWindowHint);
        //實例陰影shadow
        GraphicsDropShadowEffect *shadow = new QGraphicsDropShadowEffect(this);
        //設置陰影距離
        shadow->setOffset(0, 0);
        //設置陰影顏色
        shadow->setColor(QColor("#444444"));
        //設置陰影圓角
        shadow->setBlurRadius(30);
        //給嵌套QWidget設置陰影
        ui->widget_bg->setGraphicsEffect(shadow);
        //給垂直佈局器設置邊距(此步很重要, 設置寬度爲陰影的寬度)
        ui->lay_bg->setMargin(24);
    }

做到此步,你想要的陰影效果就實現了,看下圖
在這裏插入圖片描述

是不是非常簡單呢, 即不需要重寫paintEvent函數, 也不需要自己先作圖或者調用那複雜的系統接口。

圖中的圓角很簡單,設置下widget_bg的樣式就好了, 如果想要半透明的效果, 背景色加上透明通道就好了(rgba).

注意:

如果想要做成最大化的話,點擊最大化按鈕之後設置下lay_bg的邊距爲0就好了!

這個陰影已經夠日常生活了, 如果覺得陰影太窄, 就去Qt研究下QGraphicsDropShadowEffect這個類吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章