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"。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/950527.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

备考蓝桥杯:数据结构概念浅谈

目录 1数据结构的概念 什么是数据结构: 为什么要有数据结构 2.数据结构的三个组成要素 1.逻辑结构 2.存储结构 3.数据运算 3。算法好坏的度量&#xff08;时间复杂度和空间复杂度&#xff09; 时间复杂度计算 最优和平均和最差时间复杂度 计算时间复杂度例子 空间复…

闲谭SpringBoot--ShardingSphere分库分表探究

文章目录 1. 背景2. 创建数据库3. 修改yml配置文件4. 分片算法类5. 测试6 小结 1. 背景 接上文&#xff0c;我们对日志表&#xff0c;进行了按月的分表&#xff0c;这样每个月几百万条数据量还是扛得住的。 但是如果数据再多呢&#xff0c;除了提高硬件性能&#xff0c;还有一…

基于伪分布式模式部署Hadoop集群

1.上传Hadoop安装包 在/export/software目录下使用rz命令上传Hadoop安装包 2.创建目录 在/export/servers目录下创建wfb-hadoop目录&#xff0c;用于存放Hadoop的安装目录&#xff0c;命令如下&#xff1a; mkdir -p /export/servers/wfb-hadoop 3.安装Hadoop 1)将Hadoop安…

Android车载音频系统目录

目录 第一章 1.1 Android Automotive&#xff08;一&#xff09; 1.2 Android Automotive&#xff08;二&#xff09; 1.3 Android Automotive&#xff08;三&#xff09; 第二章 2.1 Android车载音频系统概览 2.2 车载音频焦点 2.3 车载音频配置 2.4 Audio control HAL…

怎么管理电脑usb接口,分享四种USB端口管理方法

怎么管理电脑usb接口&#xff0c;分享四种USB端口管理方法 USB接口作为电脑重要的外部接口&#xff0c;方便了数据传输和设备连接。 然而&#xff0c;不加管理的USB接口也可能带来安全隐患&#xff0c;例如数据泄露、病毒传播等。 因此&#xff0c;有效管理电脑USB接口至关重…

React+redux项目搭建流程

1.创建项目 create-react-app my-project --template typescript // 创建项目并使用typescript2.去除掉没用的文件夹&#xff0c;只保留部分有用的文件 3.项目配置&#xff1a; 配置项目的icon 配置项目的标题 配置项目的别名等&#xff08;craco.config.ts&…

conda+jupyter+pycharm:如何在Windows conda环境下运行jupyter并使用浏览器或者pycharm运行.ipynb

1 安装conda 2 conda环境下安装jupyter pip install jupyter3 设置jupyter配置文件 1&#xff09;创建 jupyter_notebook_config.py文件 jupyter notebook --generate-config 2&#xff09;设置密码 3&#xff09;设置参数 直接将以下参数修改为自己的配置后复制到配置文件…

微信小程序获取图片使用session(上篇)

概述&#xff1a; 我们开发微信小程序&#xff0c;从后台获取图片现实的时候&#xff0c;通常采用http get的方式&#xff0c;例如以下代码 <image class"user_logo" src"{{logoUrl}}"></image>变量logoUrl为ur图片l的请求地址 但是对于很多…

【江协STM32】9-1/2/3 USART串口协议、USART外设、串口发送串口发送+接收

1. 通信接口 通信的目的&#xff1a;将一个设备的数据传送到另一个设备&#xff0c;扩展硬件系统通信协议&#xff1a;制定通信的规则&#xff0c;通信双方按照协议规则进行数据收发全双工&#xff1a;指通信双方能够同时进行双向通信。发送线路和接收线路互不影响&#xff0c…

第一 二章 小车硬件介绍-(全网最详细)基于STM32智能小车-蓝牙遥控、避障、循迹、跟随、PID速度控制、视觉循迹、openmv与STM32通信、openmv图像处理、smt32f103c8t6

第一篇-STM32智能小车硬件介绍 后续章节也放这里 持续更新中&#xff0c;视频发布在小B站 里面。这边也会更新。 B站视频合集: STM32智能小车V3-STM32入门教程-openmv与STM32循迹小车-stm32f103c8t6-电赛 嵌入式学习 PID控制算法 编码器电机 跟随 小B站链接:https://www.bilib…

【网络】电路交换(Circuit Switching)、报文交换(Message Switching)和分组交换(Packet Switching)

电路交换&#xff08;Circuit Switching&#xff09;&#xff1a;一条专用的通信线路&#xff08;或电路&#xff09;&#xff08; 电话专用线路&#xff0c;好处&#xff1a;专用稳定&#xff0c;有没有数据都被占用&#xff0c;坏处&#xff1a;容易浪费&#xff09; 报文交换…

Pixel 6a手机提示无法连接移动网络,打电话失败!

1、开启VoLTE 2、如果没有&#xff0c;下载shizuku和PixelIMS应用。 shizuke Releases RikkaApps/Shizuku GitHub PixellMS Release v1.2.8 kyujin-cho/pixel-volte-patch GitHub 3、安装shizuke启动&#xff0c;开通root可以直接点击下面的启动&#xff0c;如果没有就…

游戏关卡设计的常用模式

游戏关卡分为很多种&#xff0c;但常用的有固定套路&#xff0c;分为若干种类型。 关卡是主角与怪物、敌方战斗的场所&#xff0c;包括装饰物、通道。 单人游戏的关卡较小&#xff0c;偏线性&#xff1b; 联机/MMO的关卡较大&#xff0c;通道多&#xff0c;自由度高&#xf…

DC/AC并网逆变器模型与仿真MATLAB

DC/AC并网逆变器是一种将直流电&#xff08;DC&#xff09;转化为交流电&#xff08;AC&#xff09;&#xff0c;并将其与电网并联的设备。它的核心功能是实现直流电源&#xff08;如光伏电池板或储能电池&#xff09;与电网的有效连接&#xff0c;同时保证输出电能质量满足电网…

作业:IO:day2

题目一 第一步&#xff1a;创建一个 struct Student 类型的数组 arr[3],初始化该数组中3个学生的属性 第二步&#xff1a;编写一个叫做save的函数&#xff0c;功能为 将数组arr中的3个学生的所有信息&#xff0c;保存到文件中去&#xff0c;使用fread实现fwrite 第三步&#xf…

环动科技平均售价波动下滑:大客户依赖明显,应收账款周转率骤降

《港湾商业观察》施子夫 2024年12月18日&#xff0c;浙江环动机器人关节科技股份有限公司&#xff08;以下简称&#xff0c;环动科技&#xff09;的上市审核状态变更为“已问询”&#xff0c;公司在11月25日科创板IPO获上交所受理&#xff0c;独家保荐机构为广发证券。 此次环…

【数据可视化-11】全国大学数据可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

SAP 02-AMDP Functions for CDS Table Functions

1. 创建一个Core Data Service Table Functions 新建 Core Data Service Table Function 定义CDS Table Functions EndUserText.label: a simple AMDP for CDS Table Functions ClientDependent: true //打开 Open SQL 的自动客户端处理 defin…

Ungoogled Chromium127 编译指南 MacOS篇(八)- 开始编译

1. 引言 完成了所有依赖包的安装后&#xff0c;我们终于来到了最关键的编译阶段。在开始编译之前&#xff0c;有一些重要的配置信息需要了解。本文将指导您完成整个编译过程。 2. 签名相关说明 虽然在我们的测试编译中不需要进行签名操作&#xff0c;但了解官方的签名要求仍…

SpringBootWeb案例-1(day10)

准备工作 需求 & 环境搭建 需求说明 环境搭建 步骤&#xff1a; 准备数据库表(dept、emp)创建 springboot 工程&#xff0c;引入对应的起步依赖&#xff08;web、mybatis、mysql 驱动、lombok&#xff09;配置文件 application.properties 中引入 mybatis 的配置信息&…