当前位置: 首页 > 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…...

XCTF-web-easyupload

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

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

水泥厂自动化升级利器:Devicenet转Modbus rtu协议转换网关

在水泥厂的生产流程中&#xff0c;工业自动化网关起着至关重要的作用&#xff0c;尤其是JH-DVN-RTU疆鸿智能Devicenet转Modbus rtu协议转换网关&#xff0c;为水泥厂实现高效生产与精准控制提供了有力支持。 水泥厂设备众多&#xff0c;其中不少设备采用Devicenet协议。Devicen…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...