天天看點

實作 QPushButton 預設效果簡述

簡述

很多時候,我們在使用 QPushButton 的過程中,會遇到這樣一個問題:在一個視窗widget中建立了一個QPushButton,如果widget已經通過setStyleSheet()設定了樣式表,那麼 QPushButton 的樣式就變得和它的父類 widget 的樣式一樣,顯得難看。那麼,如果想保留 QPushButton 預設效果的樣式,該怎麼處理呢?有兩種方法:

方法1:再單獨設定 QPushButton 的樣式

以下是實作QPushButton 預設樣式效果相近的代碼:

QPushButton *btn2 = new QPushButton(this);      
btn2->setText("btn2");      
btn2->setStyleSheet("QPushButton{background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(214, 214, 214, 255), stop:0.5 rgba(236, 236, 236, 255));border: 1px solid rgb(124, 124, 124);border-radius:2px;}"      
"QPushButton:pressed{background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(134, 198, 233, 255), stop:0.5 rgba(206, 234, 248, 255));border-radius:2px;border: 1px solid #5F92B2;}"      
"QPushButton:hover{background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(181, 225, 250, 255), stop:0.5 rgba(222, 242, 251, 255));border-radius:2px;border: 1px solid #3C80B1;}"      
);      

方法2:對 QPushButton 父類設定樣式表時,隻針對特定的控件進行設定,可以排除對子控件 QPushButton 的影響。

#include "mainwindow.h"      
#include "ui_mainwindow.h"      
#include <QPushButton>      
#include <QWidget>      
MainWindow::MainWindow(QWidget *parent) :      
QMainWindow(parent),      
ui(new Ui::MainWindow)      
{      
ui->setupUi(this);      
this->resize(800,600);      
//方法2:設定 mainwindow 的樣式表      
this->setStyleSheet("QMainWindow{background-color:rgb(215,225,235)}");       
//this->setStyleSheet("background-color:rgb(215,225,235)");  對整個mainwindow及子控件設定樣式表                   
//不對 btn1 設定樣式表,則它會跟随父類的樣式表      
QPushButton *btn1 = new QPushButton(this);      
btn1->setText("btn1");      
btn1->move(0,0);      
//方法1:單獨設定Qt QPushButton按鍵預設效果相近的樣式表      
QPushButton *btn2 = new QPushButton(this);      
btn2->setText("btn2");      
btn2->setStyleSheet("QPushButton{background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(214, 214, 214, 255), stop:0.5 rgba(236, 236, 236, 255));border: 1px solid rgb(124, 124, 124);border-radius:2px;}"      
"QPushButton:pressed{background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(134, 198, 233, 255), stop:0.5 rgba(206, 234, 248, 255));border-radius:2px;border: 1px solid #5F92B2;}"      
"QPushButton:hover{background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(181, 225, 250, 255), stop:0.5 rgba(222, 242, 251, 255));border-radius:2px;border: 1px solid #3C80B1;}"      
);      
btn2->move(100,100);      
}      
MainWindow::~MainWindow()      
{      
delete ui;      
}      

繼續閱讀