在Qt creator5.14中使用QSS 美化Qt界面

2024-01-20 07:32

本文主要是介绍在Qt creator5.14中使用QSS 美化Qt界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

QSS简介

QSS称为Qt Style Sheets也就是Qt样式表,它是Qt提供的一种用来自定义控件外观的机制,它有着与css3相似的语法,或者在某种意义上它可以说是对css3进行某些特化后的子集。
Qt控件自身的外观有时很难满足我们的需要,这时候一般会有两种常见的解决方案,第一种是通过重写paintEvent来实现控件的自绘,这种方式最灵活,然而学习和使用成本也是最高的;另一种则是使用qss,通过qss控制widgets的外观表达。而qss的强大之处在于它不仅简单易学,而且功能强大,对自定义组件也能提供良好的支持。

基本选择器

在这里插入图片描述

伪状态选择器

在这里插入图片描述

示例

说明

通过一个基本的示例演示qss的基本使用,对于有css基础的人来说很容易上手

新建项目

新建一个Qt Widgets Application项目,在窗体上添加一个tabWidget控件,然后修改mainwindow.cpp代码在窗体上添加一下组件。
在这里插入图片描述
mainwindow.cpp代码如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <QCheckBox>
#include <QStandardItemModel>
#include <QTableView>
#include <QVBoxLayout>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);ui->tabWidget->clear();//清空选项卡
setCentralWidget(ui->tabWidget);QWidget *tab1=new QWidget(this);QWidget *tab2=new QWidget(this);//--------------------------------------------------QTableView  *tableView = new QTableView;//提供了用于存储自定义数据的通用模型QStandardItemModel *model = new QStandardItemModel(5,4);model->setHeaderData(0,Qt::Horizontal,tr("第一季度"));model->setHeaderData(1,Qt::Horizontal,tr("第二季度"));model->setHeaderData(2,Qt::Horizontal,tr("第三季度"));model->setHeaderData(3,Qt::Horizontal,tr("第四季度"));//循环插入数据for(int row=0;row<5;row++){model->insertRows(row,1); //插入一行model->setData(model->index(row,0), qrand()%1000+1000); //插入第一列 插入一个1000-2000的随机数model->setData(model->index(row,1), qrand()%1000+1000);model->setData(model->index(row,2), qrand()%1000+1000);model->setData(model->index(row,3), qrand()%1000+1000);}tableView->setAutoScroll(true);//自动滚动条tableView->resizeColumnsToContents(); //根据内容调整大小tableView->setModel(model); //使用QVBoxLayout *vLayout = new QVBoxLayout();vLayout->addWidget(tableView);tab1->setLayout(vLayout);//--------------------------------------------------QGridLayout *layout = new QGridLayout;layout->addWidget( new QPushButton("我的按钮"), 0, 0);layout->addWidget( new QPushButton("我的按钮"), 0, 1);layout->addWidget( new QPushButton("我的按钮"), 0, 2);layout->addWidget( new QPushButton("我的按钮"), 0, 3);layout->addWidget( new QRadioButton("程序员"), 1, 0);layout->addWidget( new QRadioButton("设计"), 1, 1);layout->addWidget( new QRadioButton("测试"), 1, 2);layout->addWidget( new QRadioButton("文档"), 1, 3);layout->addWidget( new QCheckBox("音乐"), 2, 0);layout->addWidget( new QCheckBox("电影"), 2, 1);layout->addWidget( new QCheckBox("游戏"), 2, 2);layout->addWidget( new QCheckBox("睡觉"), 2, 3);for (int i = 3; i < 7; ++i) {QLabel *label = new QLabel(tr("第 %1 行:").arg(i + 1));QLineEdit *lineEdit = new QLineEdit;layout->addWidget(label , i + 1, 0);layout->addWidget(lineEdit, i + 1, 1);}tab2->setLayout(layout);//--------------------------------------------------------ui->tabWidget->setTabPosition(QTabWidget::North);//设置选项卡的位置东南西北,默认在北ui->tabWidget->addTab(tab1,tr("销售"));//在后面添加选项卡ui->tabWidget->insertTab(1,tab2,QIcon(":/images/present.ico"),tr("其他控件"));//插入带图标的选项卡ui->tabWidget->setTabIcon(0,QIcon(":/images/hot.ico"));//设置选项卡图标ui->tabWidget->setMovable(true);    ui->tabWidget->setTabToolTip(1,tr("一些组件"));//鼠标悬停弹出提示ui->tabWidget->usesScrollButtons();//选项卡滚动
}
MainWindow::~MainWindow()
{delete ui;
}

添加QSS资源

1.在项目目录下创建名称为“resource”文件夹
2.在Qt creater中新建资源文件Qt Resource File,可以点击“浏览”按钮,打开工程所在的目录下,选择“resource”文件夹。输入资源名称可为“qss”点击“下一步”->点击“完成”。
在这里插入图片描述
3. 添加.qss文件。
右键“*.qrc”—>选择“add prefix”—>在弹出的窗口中输入“/Qss”。操作完成后,到对应的“resource”目录下创建“Qss”文件夹,并在文件夹内创建扩展名称为".qss"。
在这里插入图片描述
在这里插入图片描述
4. 对应的“resource”目录下创建“Qss”文件夹,并在文件夹内创建扩展名称为”style.qss"的文件。

在这里插入图片描述

style.qss代码如下:

/* 控件的背景 */
.QWidget {background-color: beige;
}QToolBar {background-color: beige;
}QDialog, QFileDialog {background-color: beige;
}QTabWidget::pane { /* 选项卡小部件框架 */border-top: 2px solid #C2C7CB;
}QTabWidget::tab-bar {left: 5px; /* 向右移动 5px */
}QTabBar, QTabWidget {background-color: beige;
}
QTabBar::tab {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #E1E1E1, stop: 0.4 #DDDDDD,stop: 0.5 #D8D8D8, stop: 1.0 #D3D3D3);border: 1px solid darkkhaki;border-bottom-color: #C2C7CB; /*与窗格颜色相同 */border-top-left-radius: 4px;border-top-right-radius: 4px;min-width: 8ex;padding: 2px;}
QTabBar::tab:selected, QTabBar::tab:hover {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #fafafa, stop: 0.4 #f4f4f4,stop: 0.5 #e7e7e7, stop: 1.0 #fafafa);
}QTabBar::tab:selected {border-color: #9B9B9B;border-bottom-color: #C2C7CB; /* 与窗格颜色相同 */
}QTabBar::tab:!selected {margin-top: 2px; /* 使未选定的选项卡看起来更小 */
}/* 不错的Windows XP风格的密码字符. */
QLineEdit[echoMode="2"] {lineedit-password-character: 9679;
}QHeaderView::section {background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #616161, stop: 0.5 #505050,stop: 0.6 #434343, stop:1 #656565);color: white;padding-left: 4px;border: 1px solid #6c6c6c;}QHeaderView::section:checked{background-color: red;}/* 我们为按钮提供最小宽度和最小高度
使它们看起来优雅,不受文本宽度的影响。 */
QPushButton {background-color: palegoldenrod;border-width: 2px;border-color: darkkhaki;border-style: solid;border-radius: 5;padding: 3px;min-width: 9ex;min-height: 2.5ex;
}QPushButton:hover {background-color: khaki;
}/* 增加填充,这样当按下按钮时文本会移动。 */
QPushButton:pressed {padding-left: 5px;padding-top: 5px;background-color: #d0d67c;
}QLabel, QAbstractButton {font: bold;
}/* 用棕色标记强制字段。 */
.mandatory {color: brown;
}/* 状态栏上的粗体文本看起来很糟糕。 */
QStatusBar QLabel {font: normal;
}QStatusBar::item {border-width: 1;border-color: darkkhaki;border-style: solid;border-radius: 2;
}QStackedWidget, QComboBox, QLineEdit, QSpinBox, QTextEdit, QListView, QWebView, QTreeView, QHeaderView {background-color: cornsilk;selection-color: #0a214c;selection-background-color: #C19A6B;
}QListView {show-decoration-selected: 1;
}QListView::item:hover {background-color: wheat;
}/* 在填充中保留1个像素空间。当得到焦点时,就消除填充并扩大边界。看起来像物品在发光。 */
QLineEdit, QFrame {border-width: 1px;padding: 1px;border-style: solid;border-color: darkkhaki;border-radius: 5px;
}/* 消除填充并增加边框。 */
QLineEdit:focus, QFrame:focus {border-width: 3px;padding: 0px;
}/* QLabel控件  */
QLabel {border: none;padding: 0;background: none;
}/*  QLabel 上的 QToolTip提示  */
QToolTip {border: 2px solid darkkhaki;padding: 5px;border-radius: 3px;opacity: 200;
}/* 悬停时背景颜色改变*/
QRadioButton:hover, QCheckBox:hover {background-color: wheat;
}/* 对话框的按钮遵循Windows样式 */
QDialogButtonBox {button-layout: 0;
}

在窗体上应用qss样式

修改main.cpp

#include "mainwindow.h"#include <QApplication>
#include <QFile>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);//加载qss文件QFile qssFile(":/Qss/style.qss");qssFile.open(QFile::ReadOnly); //以只读方式打开if(qssFile.isOpen()){QString qss = QLatin1String(qssFile.readAll());qApp->setStyleSheet(qss);qssFile.close();}else{qDebug() << "无法打开文件";}MainWindow w;w.show();return a.exec();
}

运行结果对比

没有使用样式之前
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这篇关于在Qt creator5.14中使用QSS 美化Qt界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/625228

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

使用Python绘制蛇年春节祝福艺术图

《使用Python绘制蛇年春节祝福艺术图》:本文主要介绍如何使用Python的Matplotlib库绘制一幅富有创意的“蛇年有福”艺术图,这幅图结合了数字,蛇形,花朵等装饰,需要的可以参考下... 目录1. 绘图的基本概念2. 准备工作3. 实现代码解析3.1 设置绘图画布3.2 绘制数字“2025”3.3

Jsoncpp的安装与使用方式

《Jsoncpp的安装与使用方式》JsonCpp是一个用于解析和生成JSON数据的C++库,它支持解析JSON文件或字符串到C++对象,以及将C++对象序列化回JSON格式,安装JsonCpp可以通过... 目录安装jsoncppJsoncpp的使用Value类构造函数检测保存的数据类型提取数据对json数

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min