qt使用样式表设置窗口widget为圆角
提要
窗口widget是無法直接通過樣式表設(shè)置為圓角的,需要在窗口QWidget中拖入控件QFrame,將QFrame設(shè)置的和窗口QWidget一樣大小,將窗口QWidget中需要的控件拖入到QFrame中。
示例
下面是一個(gè)提示工具的窗口。通過它簡單的記錄一下樣式表怎么實(shí)現(xiàn)圓角窗口。
效果
沒有很好的 剪裁,看其中的綠色窗口就行。
步驟
1.創(chuàng)建項(xiàng)目,打開ui文件,在ui文件中“排兵部陣”(在QWidget窗口上放置QFrame,在QFrame上放置自己需要的控件,將QWidget設(shè)置為透明,設(shè)置QFrame為圓角,并設(shè)置其背景色實(shí)現(xiàn)圓角窗口);
2.在qss文件中編寫樣式設(shè)置;
3.在ui文件對應(yīng)的類構(gòu)造函數(shù)中設(shè)置窗體的背景透明和無邊框;
4.在項(xiàng)目中加載qss文件,一般在main函數(shù)。
就該項(xiàng)目本身而言:
1.新建文件后,打開ui文件,向其中拖入QFrame控件,將QFrame 和QWidget設(shè)置一樣的大小,接下來向QFrame中拖入需要的控件,本例中由于只做提示,便只放了一個(gè)QLabel控件。
ui文件的對象類如下:
樣式表
my.qss
/*提示工具*/ /*提示窗口的背景*/ QWidget#ToolTipForm {background-color:transparent; }/*提示窗口的frame*/ QWidget#ToolTipForm>QFrame#frame {background-color:#aaff7f;border:none;border-radius:20px; }/*標(biāo)簽*/ QFrame#frame>QLabel#label {background-color:transparent;color:#ffffff;font:14px,"宋體"; }樣式表中設(shè)置了QWidget,QFrame,QLabel三個(gè)控件。這里有一個(gè)需要注意的:需要注意控件之間的父子關(guān)系。符號“>”代表直屬子部件,說明兩個(gè)控件之間是父子關(guān)系。“#”代表后面的字段是前面控件類型的名稱,當(dāng)然也可以省略控件類型直接寫作#objectname這樣,更多符號,這里不再記錄。
qss文件編寫完成之后,加入到項(xiàng)目的資源文件夾下,同樣需要在創(chuàng)建資源文件的時(shí)候,添加前綴,然后再添加qss文件,保存。最后一步,在代碼中將qss文件的內(nèi)容加載進(jìn)去。需要在main函數(shù)中編寫,這樣不管大的項(xiàng)目,都可通過一個(gè)qss文件加載整個(gè)項(xiàng)目的樣式。這里不再提qss文件的加載,之前的qss相關(guān)介紹中有寫,讀者可以自行查閱。
這樣還沒有達(dá)到完全的圓角窗口,窗口存在圓角下面的黑色方角,最關(guān)鍵的一步:需要在該提示工具的窗口類的構(gòu)造函數(shù)中加入窗口無標(biāo)題欄和背景透明的設(shè)置。
上面只需setAttribute(Qt::WA_TranslucentBackground);和Qt::FramelessWindowHint的設(shè)置就好,作者的另兩個(gè)參數(shù)是為了項(xiàng)目需要設(shè)置的不用加,便能實(shí)現(xiàn)想要的圓角窗口。
完整的代碼如下:
tooltipform.h
tooltipform.cpp
#include "tooltipform.h" #include "ui_tooltipform.h"ToolTipForm::ToolTipForm(QWidget *parent) :QWidget(parent),ui(new Ui::ToolTipForm) {ui->setupUi(this);//設(shè)置窗口為圓角必須設(shè)置背景透明和無邊框setAttribute(Qt::WA_TranslucentBackground);//設(shè)置背景透明setWindowFlags(Qt::WindowTransparentForInput | Qt::ToolTip | Qt::FramelessWindowHint);//窗口僅用于輸出,不接收任何輸入事件 }ToolTipForm::~ToolTipForm() {delete ui; }void ToolTipForm::setToolTipInfo(QString &strTip) {ui->label->setText(strTip); }上面代碼中窗口屬性的設(shè)置Qt::WindowTransparentForInput | Qt::ToolTip,只是項(xiàng)目需要,實(shí)現(xiàn)繼承于QWidget的圓角窗口的時(shí)候,只需設(shè)置窗口無邊框和背景透明:
setAttribute(Qt::WA_TranslucentBackground); setWindowFlags(Qt::FramelessWindowHint);要是沒有setAttribute(Qt::WA_TranslucentBackground);設(shè)置窗口透明這句,便會出現(xiàn)下面的效果:
圓角窗口的圓角周圍會出現(xiàn)黑色的直角。而設(shè)置窗口背景透明很好的解決了這個(gè)問題。
總結(jié)
以上是生活随笔為你收集整理的qt使用样式表设置窗口widget为圆角的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++中链表反转2
- 下一篇: 孩子学计算机最佳年龄,孩子学编程最佳年龄