通過Qt 的樣式表實現圓形按鈕,其也可以實現圓角按鈕,當然也可以使用其他的方式,比如說,通過派生按鈕類使用繪圖事件,進行一個圖形的繪制,或者是通過自定義一個類,通過信號與槽的機制與繪圖事件的配合也能實現!當然每種方法都各有千秋,各有優點,在這里將使用不破壞類機制的方式進行對按鈕UI的圓型或者圓角矩形的繪制!
核心代碼:
#include “widget.h”
#include “ui_widget.h”
#include
//根據加載文件的方式,將qss文件導入!
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
this->resize(800,600); //設置主窗口大小
button = new QPushButton(“Love”,this); //創建按鈕
button->setGeometry((this->width()-300)/2,(this->height()-300)/2,300,300);
//根據窗口,去設置按鈕的位置
button_style(); //設置按鈕的樣式
}
void Widget::button_style()
{
QFile file(":/new/prefix1/button.qss"); //通過文件路徑創建文件對象
file.open(QFile::ReadOnly); //文件打開方式
QString str = file.readAll(); //獲取qss中全部字符
this->setStyleSheet(str); //設置樣式表
}
Widget::~Widget()
{
delete ui;
}
樣式表設置區*
QPushButton { //設置圖1的樣式表方式
font-size:100px; //文字大小
color:yellow; //前景色也就是字體顏色
border-radius:150px; //圓角大小,因為矩形的一半為150,所以圓角大小 設置為150以后,將會成為一個原型,小於150,就是圓角矩形了。
background-color:rgba(0,255,0,200); //設置按鈕背景為綠色
}
QPushButton:hover { //設置圖1的樣式表方式:懸停狀態
font-size:100px;
color:green;
border-radius:150px;
background-color:rgba(255,255,0,200); //設置按鈕背景為黃色 = 紅+綠
}
QPushButton:pressed { //設置圖1的樣式表方式:按下狀態
color:orange;
border-width:3;
border-color:orange;
border-style:solid;;
background-color:cyan; //設置按鈕背景為青色
}
也可以在 QPushButton 對象下 通過 setStyleSheet()函數直接設置樣式表的,但是對於一個部件的多種狀態,是有些 不適用的,文件加載這種方式還是蠻好的!
---------------------
設置圓形按鈕 最關鍵的是geometery的寬度和高度要相等,而且通過樣式表設置border-radius的值為高度和寬度的一般即可。
ui->pushButton->setStyleSheet("QPushButton{font-size:100px;color:yellow;border-style:solid;border-width:1px;border-color:black;border-radius:150px;}");
注意:rgba(r,g,b,a)a為alpha代表顏色透明度,0為透明,255位最大值。
border-style屬性分別有
none 定義無邊框。
hidden 與 "none" 相同。不過應用於表時除外,對於表,hidden 用於解決邊框沖突。
dotted 定義點狀邊框。在大多數瀏覽器中呈現為實線。
dashed 定義虛線。在大多數瀏覽器中呈現為實線。
solid 定義實線。
double 定義雙線。雙線的寬度等於 border-width 的值。
groove 定義 3D 凹槽邊框。其效果取決於 border-color 的值。
ridge 定義 3D 壟狀邊框。其效果取決於 border-color 的值。
inset 定義 3D inset 邊框。其效果取決於 border-color 的值。
outset 定義 3D outset 邊框。其效果取決於 border-color 的值。
inherit 規定應該從父元素繼承邊框樣式。
用一張圖簡單粗暴一目了然
調色板主要用來也可以用來更改button的顏色
QPalette pal =ui->pushButton->palette();//調色板
pal.setColor(QPalette::Button,Qt::red);
ui->pushButton->setPalette(pal);
ui->pushButton->setAutoFillBackground(true);
ui->pushButton->setFlat(true);
ui->pushButton->setText("");