Qt 界面外观
一、前言
1、 一个完善的应用程序,不仅应该有实用的功能,还要有一个漂亮的外观,这样才能使应用程序更加友好,更加吸引用户。
2、 作为一个跨平台的UI开发框架,Qt提供了强大而灵活的界面外观设计机制。
3、 本篇会讲解:
(1)、Qt风格QStyle[了解]。
(2)、调色板QPalette[了解]。
(3)、Qt样式表Qt Style Sheets。
(4)、不规则窗体和透明窗体的实现方法。
二、Qt风格QStyle[了解]
1、 QStyle类是一个抽象基类,Qt中的各种风格类都继承自QStyle。
2、 Qt内置的风格类(QStyle子类),模仿Qt支持的不同平台的样式,封装了一个GUI的外观,Qt的内建部件使用QStyle子类来执行几乎所有的绘制工作,以确保它们看起来像各个平台上的本地部件一样。
3、 QStyleFactory类,通过keys()函数获取可用的风格字符串,通过create()函数创建一个QStyle对象。
4、 一般windows风格和fusion风格默认可用,而有些风格只在特定平台上才有效,如windowsxp风格、windowsvista风格、gtk风格和macintosh风格。
5、 用Qt Designer打开.ui文件,可以用以下方式,预览界面。
Visual Studio:窗体–>预览于–>XX风格。
Qt Creator: 工具–>Form Editor–>Preview in–>XX风格。
6、 应用程序想使用不同的风格运行,可以调用QApplication的setStyle()函数来指定风格对象。
7、 代码:
#include "mainwindow.h"#include <QApplication>
#include <QStyleFactory>
#include <QDebug>int main(int argc, char *argv[])
{QApplication a(argc, argv);QStringList styleStrList = QStyleFactory::keys();qDebug() << styleStrList; //输出可用的风格字符串,如("windowsvista", "Windows", "Fusion")//设置应用程序的风格QApplication::setStyle(QStyleFactory::create("windowsvista"));MainWindow w;w.show();return a.exec();
}
8、 单个部件,可以调用部件的setStyle()函数指定该部件的风格。
如:ui->progressBar->setStyle(QStyleFactory::create(“windows”));
9、 自定义风格类:略。
三、调色板QPalette[了解]
1、 调色板QPalette类包含了部件各种状态的颜色组,管理着部件所有颜色信息。
2、 Qt中所有部件都包含一个调色板,并且使用各自的调色板来绘制它们自身。
3、 QPalette类有两个基本概念,一个是ColorGroup,另一个是ColorRole。
4、 一个调色板有三种状态颜色组ColorGroup,激活(Active)、非激活(Inactive)和失效(Disabled)。
(1)、激活颜色组(QPalette::Active):用于获得键盘焦点的窗口。
(2)、非激活颜色组(QPalette::Inactive): 用于其它没有获得键盘焦点的窗口。
(3)、失效颜色组(QPalette::Disabled): 用于因为一些原因而不可用的部件(设置Disabled)。
5、 调色板的颜色角色,用来指定该颜色所起的作用,主要的颜色角色ColorRole有:
(1)、QPalette::Window 一般的背景颜色。
(2)、QPalette::WindowText 一般的前景颜色。
(3)、QPalette::Base 主要作为输入部件(如QLineEdit)的背景色,也可用作QComboBox的下拉列表的背景色,或者QToolBar的手柄颜色,一般是白色或其它浅色。
(4)、QPalette::AlternateBase 在交替行颜色的视图中作为交替背景色。
(5)、QPalette::ToolTipBase 作为QToolTip和QWhatsThis的背景色。
(6)、QPalette::ToolTipText 作为QToolTip和QWhatsThis的前景色。
(7)、QPalette::Button 按钮部件背景色。
(8)、QPalette::ButtonText 按钮部件前景色。
(9)、QPalette::BrightText 一种与深色对比度较大的文本颜色,一般用于当Text或者WindowText的对比度较差时。
6、 应用程序更改调色板:
(1)、调用QApplication::palette()函数获取其调色板。
(2)、调色板更改。
(3)、调用QApplication::setPalette()函数使用该调色板。
7、 一个部件更改调色板:
(1)、调用部件的palette()函数获取其调色板。
(2)、调色板更改。
(3)、调用部件的setPalette()函数使用该调色板。
8、 注意,
(1)、更改部件的调色板只会影响该部件及其子部件,更改应用程序的调色板会影响到该程序的所有窗口部件。(继承关系)
(2)、.ui上的部件,可以在属性编辑器中修改palette属性,来更改调色板。(可以预览效果,也可以看到颜色角色对应哪里)
9、 主要函数:
void QPalette::setColor ( ColorRole role, const QColor & color ); //所有颜色组的颜色角色role,都设置为color。
void QPalette::setColor ( ColorGroup group, ColorRole role, const QColor & color ); //给定颜色组group,给定颜色角色role,设置为color。
void QPalette::setBrush (QPalette::ColorRole role, const QBrush & brush);
void QPalette::setBrush (QPalette::ColorGroup group, QPalette::ColorRole role, const QBrush & brush);
10、 代码:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
//获取pushButton的调色板
QPalette palette1 = ui->pushButton->palette();
//设置按钮文本颜色为红色
palette1.setColor(QPalette::ButtonText, Qt::red);
//设置按钮背景色为绿色
palette1.setColor(QPalette::Button, Qt::green);
//pushButton使用修改后的调色板
ui->pushButton->setPalette(palette1);//设置spinBox不可用
ui->spinBox->setDisabled(true);
QPalette palette2 = ui->spinBox->palette();
//设置spinBox不可用时的背景颜色为蓝色
palette2.setColor(QPalette::Disabled, QPalette::Base, Qt::blue);
ui->spinBox->setPalette(palette2);
}
三、Qt样式表
详情见"Qt 样式表.txt"。
相关文章:
Qt 界面外观
一、前言 1、 一个完善的应用程序,不仅应该有实用的功能,还要有一个漂亮的外观,这样才能使应用程序更加友好,更加吸引用户。 2、 作为一个跨平台的UI开发框架,Qt提供了强大而灵活的界面外观设计机制。 3、 本篇会讲解&…...

aws(学习笔记第二十二课) 复杂的lambda应用程序(python zip打包)
aws(学习笔记第二十二课) 开发复杂的lambda应用程序(python的zip包) 学习内容: 练习使用CloudShell开发复杂lambda应用程序(python) 1. 练习使用CloudShell CloudShell使用背景 复杂的python的lambda程序会有许多依赖的包,如果不提前准备好这些python的…...
HTML课堂之搜索工具箱/讲师duluo
目录: 源码在最后 小提示: 1.养成打卡习惯没日多加练习即可提什能力 2.源码在最后,请先看完代码讲解,在尝试自己写,这样容易掌握 3.请勿复制粘贴,因为你没掌握,即使复制粘贴也学不会 课堂重点笔…...

当歌 - RSS 订阅分发平台开发
以下将详细介绍当歌平台的技术架构、功能实现以及相关代码逻辑。 一、项目概述 当歌是一个极简的 RSS 订阅分发平台,旨在为用户提供便捷的 RSS 管理和订阅服务,帮助用户轻松获取和分享最新资讯。 二、技术架构 后端语言:PHP 数据库&#…...

学习threejs,导入wrl格式的模型
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.VRMLLoader wrl模型加…...

使用GitLab+Jenkins搭建CICD执行环境
使用GitLabJenkins搭建CI\CD执行环境 前言什么是DevOps?什么是CI/CD?使用GitLabJenkins搭建CI\CD执行环境GitLab安装1. 安装和配置所需的依赖2. 下载并安装极狐GitLab3. 登录极狐GitLab 实例4.常用gitlab指令5.修改密码 Jenkins安装1.Jenkins 的主要特点…...
使用vue-pdf预览pdf和解决pdf电子签章显示问题
使用vue-pdf预览pdf和解决pdf电子签章显示问题 第一步:npm install vue-pdf 第二步页面使用vue-pdf <template><div class"pdf1"><Pdf v-for"i in numPages" :key"i" :src"src" :page"i" />…...

【Rust自学】11.3. 自定义错误信息
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.3.1. 添加错误信息 在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏,而这篇文章讲的就是它…...
05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos
Docker学习,常用安装:Mysql、Redis、Nginx、Nacos 一、Docker安装Mysql 1、docker search mysql ##查找mysql版本都有哪些 2、docker pull mysql:5.6 ##下载5.6版本的mysql镜像 3、docker run -p 13306:3306 --name mysql ##运行…...

RabbitMQ高级篇之MQ可靠性 数据持久化
文章目录 消息丢失的原因分析内存存储的缺陷如何确保 RabbitMQ 的消息可靠性?数据持久化的三个方面持久化对性能的影响持久化实验验证性能对比Spring AMQP 默认持久化总结 消息丢失的原因分析 RabbitMQ 默认使用内存存储消息,但这种方式带来了两个主要问…...
leetcode 2274. 不含特殊楼层的最大连续楼层数 中等
Alice 管理着一家公司,并租用大楼的部分楼层作为办公空间。Alice 决定将一些楼层作为 特殊楼层 ,仅用于放松。 给你两个整数 bottom 和 top ,表示 Alice 租用了从 bottom 到 top(含 bottom 和 top 在内)的所有楼层。另…...

Tauri教程-基础篇-第二节 Tauri的核心概念上篇
“如果结果不如你所愿,就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持,而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第二节…...
大风车excel:怎么把题库导入excel?题库导入excel
高效管理试题库:如何批量导入试题到 Excel? 在教育培训、学校管理以及在线学习平台中,试题库的管理是核心工作之一。如何快速、准确地将试题导入到 Excel 表格中,成为许多教育工作者和开发者的迫切需求。本文将围绕“题库导入 Ex…...

Java 兼容读取WPS和Office图片,结合EasyExcel读取单元格信息
在Java开发中,处理Excel文件中的图片(包括浮动图片和嵌入图片)是一个常见的需求。本文将介绍如何使用EasyExcel和Apache POI库来读取Excel文件中的图片,并将其与数据进行关联。 1. 引言 在许多应用场景中,Excel文件不…...

电脑硬盘系统迁移及问题处理
一、系统迁移准备 1、确认你的电脑主板是否支持安装两块硬盘,如电脑主板有多个M2硬盘接口,我们将新硬盘安装到主板上,原来的老硬盘安装在第二个接口上,主板只有一个M2接口的话可以使用移动硬盘盒。 2、新硬盘安装好后,我们进入原来的系统,在 此电脑–右键–管理–磁盘管…...

网关 + Nacos配置管理
网关 网关:就是网络的关口,负责请求的路由、转发、身份校验。 网关路由 新建网关模块gateway引入相关依赖 <!--网关--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter…...

《Spring Framework实战》6:核心技术 4.1.IoC 容器
欢迎观看《Spring Framework实战》视频教程 本章介绍 Spring 的控制反转 (IoC) 容器。 本部分摘要 Spring IoC 容器和 Bean 简介 容器概述 Bean 概述 依赖 Bean 作用域 自定义 Bean 的性质 Bean 定义继承 容器扩展点 基于注解的容器配置 Clas…...
ModuleNotFoundError: No module named ‘audioop‘
问题 ModuleNotFoundError: No module named pyaudioop ModuleNotFoundError: No module named audioop解决方案 安装库 pip3 install audioop-lts...

STM32-笔记38-I2C-oled实验
一、什么是I2C? I2C总线,全称Inter-Integrated Circuit(互连集成电路),是一种由Philips(现NXP半导体)公司在1980年代初开发的同步 串行 半双工通信总线。 二、有了串口通信为什么要使用I2C&…...

人大金仓实现主键自增.
使用数据库中自带的参数类型 serial 类型(相当于创建一个INT列), 或者bigserial(相当于创建一个BIGINT列. 示例sql: CREATE TABLE ord(id SERIAL,ord_no INT NOT NULL,ord_name VARCHAR(32),CONSTRAINT "ord_PKEY" PRIMARY KEY ("id"));插入时指定自增值…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
掌握 HTTP 请求:理解 cURL GET 语法
cURL 是一个强大的命令行工具,用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中,cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...