当前位置: 首页 > news >正文

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、 一个完善的应用程序&#xff0c;不仅应该有实用的功能&#xff0c;还要有一个漂亮的外观&#xff0c;这样才能使应用程序更加友好&#xff0c;更加吸引用户。 2、 作为一个跨平台的UI开发框架&#xff0c;Qt提供了强大而灵活的界面外观设计机制。 3、 本篇会讲解&…...

aws(学习笔记第二十二课) 复杂的lambda应用程序(python zip打包)

aws(学习笔记第二十二课) 开发复杂的lambda应用程序(python的zip包) 学习内容&#xff1a; 练习使用CloudShell开发复杂lambda应用程序(python) 1. 练习使用CloudShell CloudShell使用背景 复杂的python的lambda程序会有许多依赖的包&#xff0c;如果不提前准备好这些python的…...

HTML课堂之搜索工具箱/讲师duluo

目录&#xff1a; 源码在最后 小提示&#xff1a; 1.养成打卡习惯没日多加练习即可提什能力 2.源码在最后&#xff0c;请先看完代码讲解&#xff0c;在尝试自己写&#xff0c;这样容易掌握 3.请勿复制粘贴&#xff0c;因为你没掌握&#xff0c;即使复制粘贴也学不会 课堂重点笔…...

当歌 - RSS 订阅分发平台开发

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

学习threejs,导入wrl格式的模型

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.VRMLLoader wrl模型加…...

使用GitLab+Jenkins搭建CICD执行环境

使用GitLabJenkins搭建CI\CD执行环境 前言什么是DevOps&#xff1f;什么是CI/CD&#xff1f;使用GitLabJenkins搭建CI\CD执行环境GitLab安装1. 安装和配置所需的依赖2. 下载并安装极狐GitLab3. 登录极狐GitLab 实例4.常用gitlab指令5.修改密码 Jenkins安装1.Jenkins 的主要特点…...

使用vue-pdf预览pdf和解决pdf电子签章显示问题

使用vue-pdf预览pdf和解决pdf电子签章显示问题 第一步&#xff1a;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. 自定义错误信息

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.3.1. 添加错误信息 在 11.2. 断言(Assert) 中我们学习了assert!、assert_eq!和assert_ne!这三个宏&#xff0c;而这篇文章讲的就是它…...

05、Docker学习,常用安装:Mysql、Redis、Nginx、Nacos

Docker学习&#xff0c;常用安装&#xff1a;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 的消息可靠性&#xff1f;数据持久化的三个方面持久化对性能的影响持久化实验验证性能对比Spring AMQP 默认持久化总结 消息丢失的原因分析 RabbitMQ 默认使用内存存储消息&#xff0c;但这种方式带来了两个主要问…...

leetcode 2274. 不含特殊楼层的最大连续楼层数 中等

Alice 管理着一家公司&#xff0c;并租用大楼的部分楼层作为办公空间。Alice 决定将一些楼层作为 特殊楼层 &#xff0c;仅用于放松。 给你两个整数 bottom 和 top &#xff0c;表示 Alice 租用了从 bottom 到 top&#xff08;含 bottom 和 top 在内&#xff09;的所有楼层。另…...

Tauri教程-基础篇-第二节 Tauri的核心概念上篇

“如果结果不如你所愿&#xff0c;就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持&#xff0c;而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第二节…...

大风车excel:怎么把题库导入excel?题库导入excel

高效管理试题库&#xff1a;如何批量导入试题到 Excel&#xff1f; 在教育培训、学校管理以及在线学习平台中&#xff0c;试题库的管理是核心工作之一。如何快速、准确地将试题导入到 Excel 表格中&#xff0c;成为许多教育工作者和开发者的迫切需求。本文将围绕“题库导入 Ex…...

Java 兼容读取WPS和Office图片,结合EasyExcel读取单元格信息

在Java开发中&#xff0c;处理Excel文件中的图片&#xff08;包括浮动图片和嵌入图片&#xff09;是一个常见的需求。本文将介绍如何使用EasyExcel和Apache POI库来读取Excel文件中的图片&#xff0c;并将其与数据进行关联。 1. 引言 在许多应用场景中&#xff0c;Excel文件不…...

电脑硬盘系统迁移及问题处理

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

网关 + Nacos配置管理

网关 网关&#xff1a;就是网络的关口&#xff0c;负责请求的路由、转发、身份校验。 网关路由 新建网关模块gateway引入相关依赖 <!--网关--> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter…...

《Spring Framework实战》6:核心技术 4.1.IoC 容器

欢迎观看《Spring Framework实战》视频教程 本章介绍 Spring 的控制反转 &#xff08;IoC&#xff09; 容器。 本部分摘要 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&#xff1f; I2C总线&#xff0c;全称Inter-Integrated Circuit&#xff08;互连集成电路&#xff09;&#xff0c;是一种由Philips&#xff08;现NXP半导体&#xff09;公司在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"));插入时指定自增值…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

WEB3全栈开发——面试专业技能点P4数据库

一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库&#xff0c;基于 mysql 库改进而来&#xff0c;具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点&#xff1a; 支持 Promise / async-await&#xf…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”

非常好&#xff0c;我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题&#xff0c;统一使用 二重复合函数&#xff1a; z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y))​ 来全面说明。我们会展示其全微分形式&#xff08;偏导…...

【QT控件】显示类控件

目录 一、Label 二、LCD Number 三、ProgressBar 四、Calendar Widget QT专栏&#xff1a;QT_uyeonashi的博客-CSDN博客 一、Label QLabel 可以用来显示文本和图片. 核心属性如下 代码示例: 显示不同格式的文本 1) 在界面上创建三个 QLabel 尺寸放大一些. objectName 分别…...

PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础

在构建任何动态、数据驱动的Web API时&#xff0c;一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说&#xff0c;深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言&#xff0c;以及学会如何在Python中操作数据库&#xff0c;是…...