6、Qt QSS界面美化

文章介绍了如何在Qt Widgets应用中利用QSS进行界面美化,并实现按钮点击时界面在银色与黑色风格间切换。项目从创建Qt Widgets应用开始,包括资源文件的添加、QSS文件的应用及控件初始化,如表格、列表、树形视图等的设置。

一、功能介绍

1、根据刘典武大佬和网上查询的资料,进行更改

https://gitee.com/feiyangqingyun/QWidgetDemo#https://gitee.com/feiyangqingyun/qtkaifajingyan

2、使用QSS对界面进行美化 

3、点击按钮,进行界面样式切换(银色和黑色)

二、项目创建

1、新建Qt Widgets应用,名称为MyQSS,基类选择QMainWindow;

在界面上添加要进行美化的控件

3、下载图标

iconfont-阿里巴巴矢量图标库

下载好的图标放在工程目录下的icon文件夹中 

4、新建silvery.css和psblack.css文件,放在工程目录下的qss文件夹中 

5、向项目中添加一个Qt资源文件,名称为file;

右击“MyQSS”->“Add New”

 Qt->Qt Resource File

名称file->下一步 ->完成

添加->添加前缀->把“ /new/prefix1”删掉

 添加->添加文件,把.qss文件和下载的图标都添加进来,添加好之后Ctrl+S保存;

添加好的工程如下

三、代码展示

1、MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QFile>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void systemInit();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

private:
    Ui::MainWindow *ui;

    QFile *qssFile;
};

#endif // MAINWINDOW_H

2、MainWindow.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"

#include <QDir>
#include <QStringListModel>
#include <QFileSystemModel>
#include <QStandardItemModel>
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    systemInit();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::systemInit()
{
    //加载样式表
    //QFile file(":/qss/silvery.css");
    qssFile = new QFile(":/qss/psblack.css", this);
    qssFile->open(QFile::ReadOnly);                 //只读方式打开文件
    QString styleSheet = tr(qssFile->readAll());    //转为QString类型
    this->setStyleSheet(styleSheet);                //设置样式表
    qssFile->close();

    //控件禁用
    ui->pushButton->setEnabled(false);
    ui->radioButton->setEnabled(false);
    ui->checkBox->setEnabled(false);
    ui->commandLinkButton->setEnabled(false);
    ui->buttonBox->setEnabled(false);

    //QTableWidget
    ui->tableWidget->setRowCount(10); //设置行数为10
    ui->tableWidget->setColumnCount(5); //设置列数为5
    ui->tableWidget->setWindowTitle("QTableWidget & Item");
    QStringList header;
    header<<"Month"<<"Description";
    ui->tableWidget->setHorizontalHeaderLabels(header);
    ui->tableWidget->setItem(0,0,new QTableWidgetItem("Jan"));
    ui->tableWidget->setItem(1,0,new QTableWidgetItem("Feb"));
    ui->tableWidget->setItem(2,0,new QTableWidgetItem("Mar"));
    ui->tableWidget->setItem(0,1,new QTableWidgetItem("Jan's month"));
    ui->tableWidget->setItem(1,1,new QTableWidgetItem("Feb's month"));
    ui->tableWidget->setItem(2,1,new QTableWidgetItem("Mar's month"));


    //QListWidget
    ui->listWidget->addItem(new QListWidgetItem(QIcon(":/icon/checkBox_indeterminate_00BB9E.png"), tr("1")));
    ui->listWidget->addItem(new QListWidgetItem(QIcon(":/icon/checkBox_indeterminate_262829.png"), tr("2")));
    ui->listWidget->addItem(new QListWidgetItem(QIcon(":/icon/checkBox_indeterminate_404244.png"), tr("3")));
    ui->listWidget->addItem(new QListWidgetItem(QIcon(":/icon/checkBox_indeterminate_969696.png"), tr("4")));

    //QTreeWidget
    QStringList headers;
    headers << "Name" << "Number";
    ui->treeWidget->setHeaderLabels(headers);
    QStringList rootTextList;
    rootTextList << "Root" << "0";
    QTreeWidgetItem *root = new QTreeWidgetItem(ui->treeWidget, rootTextList);
    new QTreeWidgetItem(root, QStringList() << QString("Leaf 1") << "1");
    QTreeWidgetItem *leaf2 = new QTreeWidgetItem(root,                                       QStringList() << QString("Leaf 2") << "2");
    leaf2->setCheckState(0, Qt::Checked);
    QList<QTreeWidgetItem *> rootList;
    rootList << root;
    ui->treeWidget->insertTopLevelItems(0, rootList);

    //QListView
    QStringList strlist;
    strlist<<"A"<<"B"<<"C"<<"D";
    QStringListModel *listModel = new QStringListModel(strlist);
    ui->listView->setModel(listModel);
    ui->listView->setModel(listModel);

    //QTreeView
    QFileSystemModel *fileSystemModel = new QFileSystemModel;
    fileSystemModel->setRootPath(QDir::currentPath());
    ui->treeView->setModel(fileSystemModel);

    //QTableView
    QStandardItemModel* model = new QStandardItemModel(this);
    model->setItem(0, 0, new QStandardItem("张三"));
    model->setItem(0, 1, new QStandardItem("3"));
    model->setItem(0, 2, new QStandardItem("男"));
    ui->tableView->setModel(model);


}

void MainWindow::on_pushButton_clicked()
{

}

void MainWindow::on_pushButton_2_clicked()
{
    QMessageBox::warning(this, tr("My Application"),
                                     tr("The document has been modified.\n"
                                        "Do you want to save your changes?"),
                                     QMessageBox::Save | QMessageBox::Discard
                                     | QMessageBox::Cancel,
                                     QMessageBox::Save);
}

void MainWindow::on_pushButton_3_clicked()
{
    if(qssFile->fileName() == ":/qss/psblack.css")
    {
        qssFile->setFileName(":/qss/silvery.css");
    }
    else
    {
        qssFile->setFileName(":/qss/psblack.css");
    }
    qssFile->open(QFile::ReadOnly);                 //只读方式打开文件
    QString styleSheet = tr(qssFile->readAll());    //转为QString类型
    this->setStyleSheet(styleSheet);                //设置样式表
    qssFile->close();
}

 3、psblack.css

/* -----------------------------黑色-------------------------------
背景颜色:#4F4F4F

字体颜色:#FFFFFF
选中字体颜色:#00BB9E
禁用时字体颜色:#DCE1E6

控件颜色:#262829 #969696
禁用控件颜色: #404244

摁键颜色:#646464 #525252

边框颜色:#969696
选中边框颜色:#00BB9E
禁用边框颜色:#4F4F4F
------------------------------------------------------------ */

/* 图标下载网址 ------------------------------------------------------------
https://www.iconfont.cn/search/index?q=%E4%B8%89%E8%A7%92&page=1&tag=&searchType=icon&fromCollection=-1&fills=
-------------------------------------------------------------------*/

/* 官网教程 ------------------------------------------------------------
https://doc.qt.io/qt-5/stylesheet-examples.html
-------------------------------------------------------------------*/

QWidget {
    background-color: #4F4F4F;
    padding: 0px;
    color: #FFFFFF;
}
/* QMainWindow 主界面------------------------------------------------
QMenBar         菜单栏
QMenu           菜单
QToolBar        工具栏
Central Widget  中心部件
QDockWidget     停靠窗口
QStatusBar      状态栏
QSizeGrip       提示窗口拉伸标志
QMessageBox     无法用QSS设置
---------------------------------------------------------------------*/
/* QMenuBar ---------------------------------------------------------
菜单栏
---------------------------------------------------------------------*/
QMenuBar{
    background-color: #4F4F4F;
    color: #FFFFFF;
    margin: 0px;
    padding: 3px 10px;
    min-height: 20px;
    min-width: 20px;
}
QMenuBar::item{
    background-color: #4F4F4F;
    color: #FFFFFF;
    margin: 0px;
    padding: 3px 10px;
}
QMenuBar::item:selected{
    background-color: #262829;
    border: 1px solid #00BB9E;
}
QMenuBar::item:pressed{
    background-color: #969696;
    border: 1px solid #00BB9E;
}
QMenuBar,QMenuBar:disabled{
    color: #DCE1E6;
    background-color: #4F4F4F;
    border: 1px solid #4F4F4F;
    margin: 0px;
}
/* QMenu ------------------------------------------------------------
菜单
--------------------------------------------------------------------------- */
QMenu::item{
    padding: 3px 20px;
}
QMenu::indicator{
    width: 13px;
    height: 13px;
}
QMenu,QMenu:disabled{
    color: #DCE1E6;
    background-color: #4F4F4F;
    border: 1px solid #4F4F4F;
    margin: 0px;
}
QMenu::item:selected{
    background-color: #262829;
    border: 1px solid #00BB9E;
}
QMenu::item:pressed{
    background-color: #969696;
    border: 1px solid #00BB9E;
}
QMenu::separator{ /*分隔符*/
    height: 1px;
    background-color: #969696;
}
/* QToolBar ------------------------------------------------------------
工具栏
--------------------------------------------------------------------------- */
QToolBar, QToolBar:disabled{
    color: #DCE1E6;
    background-color: #4F4F4F;
    border: 0px solid #4F4F4F;
    border-width: 0px 0px 1px 0px;
    min-height: 30px;
}
QToolBar::separator{
    width: 1px;
    background-color: #969696;
}
QToolBar QToolButton{
    min-height: 30px;
    background-color: #4F4F4F;
    border: 0px solid #969696;
    border-width: 0px 0px 1px 0px;
    color: #FFFFFF;
    border-radius: 0px;
}
QToolBar QToolButton:hover{
    background-color: #262829;
    border: 1px solid #00BB9E;
}
QToolBar QToolButton:pressed{
    background-color: #969696;
    border: 1px solid #00BB9E;
}

/* QStatusBar ------------------------------------------------------------
状态栏
--------------------------------------------------------------------------- */
QStatusBar{
    color: red;
    background-color:#4F4F4F;
}

/* QSizeGrip ------------------------------------------------------------
提示窗口拉伸标志
--------------------------------------------------------------------------- */
QSizeGrip{
    min-height: 20px;
    min-width: 20px;
    border-image: url(:/icon/zoom_969696.png);
}
/* QDockWidget ------------------------------------------------------------
停靠窗口:在下面
--------------------------------------------------------------------------- */

/* Buttons 按钮------------------------------------------------------------
QPushButton             推动按钮
QToolButton             工具按钮
QRadioButton            单选按钮
QCheckBox               复选键
QCommandLinkButton	命令链接按钮
QDialogButtonBox              按钮盒
--------------------------------------------------------------------------*/

/* QPushButton ------------------------------------------------------------
摁键
https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qpushbutton

--------------------------------------------------------------------------- */
QPushButton {
    background: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #646464 , stop:1 #525252);
    border: 1px solid #969696;
    color: #FFFFFF;
    border-radius: 4px;
    padding: 1px;
    min-height: 25px;
    min-width: 35px;
}
QPushButton:hover {
    background-color: #00BB9E;
    border: 1px solid #00BB9E;
    color: #FFFFFF;
}
QPushButton:pressed {
    background-color: #969696;
    border: 1px solid #00BB9E;
    color: #FFFFFF;
}
QPushButton:focus {
  border: 1px solid #00BB9E;
}
QPushButton:!enabled {
    background-color: #4F4F4F;
    border: 1px solid #404244;
    border-style: inset;
}

/* QToolButton ------------------------------------------------------------

--------------------------------------------------------------------------- */
QToolButton {
    background: qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #646464 , stop:1 #525252);
    border: 1px solid #969696;
    color: #FFFFFF;
    border-radius: 4px;
    padding: 3px;
    min-height: 20px;
    min-width: 30px;
}
QToolButton:hover {
    background-color: #00BB9E;
    border: 1px solid #00BB9E;
    color: #FFFFFF;
}
QToolButton:pressed {
    background-color: #969696;
    border: 1px solid #00BB9E;
    color: #FFFFFF;
}
QToolButton:focus {
  border: 1px solid #00BB9E;
}
QToolButton[popupMode="0"] {
    padding-right: 2px;
}
QToolButton[popupMode="1"] {
    padding-right: 2px;
}
QToolButton[popupMode="2"] {
    padding-right: 2px;
}
QToolButton::menu-button {
    padding: 2px;
    border-radius: 4px;
    border: 1px solid #969696;
    width: 12px;
    outline: none;
}
QToolButton:menu-button:hover {
    background-color: #00BB9E;
    border: 1px solid #969696;
    color: #FFFFFF;
}
QToolButton:menu-button:pressed {
    background-color: #969696;
    border: 1px solid #00BB9E;
    color: #FFFFFF;
}
QToolButton::menu-arrow {
    image: url(":/icon/down_triangle_4F4F4F.png");
    height: 8px;
    width: 8px;
}
QToolButton::menu-arrow:hover {
    image: url(":/icon/down_triangle_262829.png");
}
QToolButton::menu-arrow:pressed {
    image: url(":/icon/down_triangle_4F4F4F.png");
}
QToolButton:disabled {
    color: #DCE1E6;
    background-color: #4F4F4F;
    border: 1px solid #404244;
}

/* QRadioButton -----------------------------------------------------------

https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qradiobutton

--------------------------------------------------------------------------- */
QRadioButton {
    background-color: transparent;
    color: #FFFFFF;
    spacing: 4px;
    padding: 0px;
    border: none;
    outline: none;
    min-height: 20px;
    min-width: 30px;
}
QRadioButton:focus {
    border: none;
}
QRadioButton::indicator {
    border: none;
    outline: none;
    margin-left: 4px;
    height: 16px;
    width: 16px;
}
QRadioButton::indicator:unchecked {
    image: url(:/icon/radioButton_unselect_969696.png);
}
QRadioButton::indicator:unchecked:hover{
    border: none;
    outline: none;
    image: url(:/icon/radioButton_unselect_262829.png);
}
QRadioButton::indicator:unchecked:focus{
    border: none;
    outline: none;
    image: url(:/icon/radioButton_unselect_00BB9E.png);
}
QRadioButton::indicator:unchecked:pressed {
    border: none;
    outline: none;
    image: url(:/icon/radioButton_unselect_969696.png);
}
QRadioButton::indicator:checked {
    border: none;
    outline: none;
    image: url(:/icon/radioButton_select_969696.png);
}
QRadioButton::indicator:checked:hover{
    border: none;
    outline: none;
    image: url(:/icon/radioButton_select_262829.png);
}
QRadioButton::indicator:checked:focus{
    border: none;
    outline: none;
    image: url(:/icon/radioButton_select_00BB9E.png);
}
QRadioButton::indicator:checked:pressed {
    border: none;
    outline: none;
    image: url(:/icon/radioButton_select_969696.png);
}

QRadioButton:disabled{
    background-color: #4F4F4F;
    color: #DCE1E6;
}

QRadioButton::indicator:unchecked:disabled {
    image: url(:/icon/radioButton_unselect_404244.png);
}

QRadioButton::indicator:checked:disabled {
    image: url(:/icon/radioButton_select_404244.png);
}

/* QCheckBox --------------------------------------------------------------
QT网址
https://doc.qt.io/qt-5/stylesheet-examples.html#customizing-qcheckbox
图标网址
https://www.iconfont.cn/search/index?searchType=icon&q=%E5%8D%8A%E9%80%89&page=3&fromCollection=-1&fills=&tag=

--------------------------------------------------------------------------- */
QCheckBox {
    background-color: #4F4F4F;
    color: #FFFFFF;
    spacing: 4px;
    outline: none;
    padding-top: 4px;
    padding-bottom: 4px;
    min-height: 20px;
    min-width: 30px;
}
QCheckBox:disabled {
    background-color: #4F4F4F;
    color: #DCE1E6;
}
QCheckBox::indicator {
    margin-left: 4px;
    height: 16px;
    width: 16px;
}
QCheckBox::indicator:unchecked {
    image: url(:/icon/checkBox_unselect_969696.png);
}
QCheckBox::indicator:unchecked:focus {
    image: url(:/icon/checkBox_unselect_00BB9E.png);
}
QCheckBox::indicator:unchecked:hover {
    image: url(:/icon/checkBox_unselect_00BB9E.png);
}
QCheckBox::indicator:unchecked:pressed {
    image: url(:/icon/checkBox_unselect_262829.png);
}
QCheckBox::indicator:unchecked:disabled {
    image: url(:/icon/checkBox_unselect_404244.png);
}

QCheckBox::indicator:checked {
    image: url(:/icon/checkBox_select_969696.png);
}
QCheckBox::indicator:checked:focus {
    image: url(:/icon/checkBox_select_00BB9E.png);
}
QCheckBox::indicator:checked:hover {
    image: url(:/icon/checkBox_select_00BB9E.png);
}
QCheckBox::indicator:checked:pressed {
    image: url(:/icon/checkBox_select_262829.png);
}
QCheckBox::indicator:checked:disabled {
    image: url(:/icon/checkBox_unselect_404244.png);
}
QCheckBox::indicator:indeterminate {
    image: url(":/icon/checkBox_indeterminate_969696.png");
}
QCheckBox::indicator:indeterminate:focus {
    image: url(":/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值