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