【Qt之·控件·样式表】

系列文章目录


文章目录

  • 前言
  • 一、Qt样式表的基础知识
    • 1.1 Qt样式表的定义和语法规则
    • 1.2 Qt样式表中的选择器和属性
      • 1.2.1 盒子模型
        • 1.2.2 border
    • 1.3 Qt样式表中的伪类和伪元素
  • 二、编写基本的Qt样式表
    • 2.1 在Qt应用程序中引入样式表文件的方式
    • 2.2 设置基本的背景色、字体样式等
  • 三、Qt样式表的高级应用技巧
    • 3.1 使用选择器和属性选择器来更精确地定位元素
    • 3.2 使用伪类和伪元素来实现特定的效果
    • 3.3 使用层叠样式表(QSS)选择器和属性
  • 四、Qt样式表的调试和优化
    • 4.1 使用Qt的样式编辑器
    • 4.2 使用Qt Creater的视觉调试工具
    • 4.3 实时预览和调试样式表
  • 五、不同控件样式表语法
    • 5.1 QComboBox
      • 5.1.1 设置下拉框框体
      • 5.1.2 设置下拉框窗体子项
      • 5.1.3 设置下拉框窗体
  • 六、实例演示
  • 总结


前言

  控件样式表是一种基于层叠样式表(CSS)语法的方式,用于定制和美化Qt控件的外观和风格。通过控件样式表,我们可以改变控件的背景颜色、字体、边框等属性,还可以设置控件在不同状态下的样式,如鼠标悬停、按下等。这为我们提供了很大的自由度,使我们能够根据自己的需求和设计风格来定制界面。

  本博客将介绍如何使用Qt样式表来定制常见的控件,包括按钮、标签、文本框等。我们将学习如何设置控件的背景颜色、字体、边框等属性,如何设置控件在不同状态下的样式,以及如何通过样式表设置控件的大小和位置等。


一、Qt样式表的基础知识

1.1 Qt样式表的定义和语法规则

1.2 Qt样式表中的选择器和属性

1.2.1 盒子模型

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/72c557f95f2b4f1ebc57bd1371cde4f8.png在这里插入图片描述

注意: margin、border-width和padding属性都默认为0。在这种情况下,所有四个矩形(边距、边框、填充和内容)都完全重合。

CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。

盒模型允许我们在其它元素和周围元素边框之间的空间放置元素。

下面的图片说明了盒子模型(Box Model):
不同部分的说明:

  • Margin(外边距) - 清除边框外的区域,外边距是透明的。
  • Border(边框) - 围绕在内边距和内容外的边框。
  • Padding(内边距) - 清除内容周围的区域,内边距是透明的。
  • Content(内容) - 盒子的内容,显示文本和图像。
    为了正确设置元素在所有浏览器中的宽度和高度,你需要知道的盒模型是如何工作的。
1.2.2 border

每个边框有3个方面:样式(或外观)、颜色、以及其宽度(粗细),下面我们分别重点解释这三项。
边框样式(border-style)
设置元素所有边框的样式,或者单独地为各边设置边框样式。它有10个属性值,分别是:

枚举值说明
none无样式
hidden同样是无样式,主要用于解决和表格的边框冲突
dotted点划线
dashed虚线
solid:实线
double双线,两条线加上中间的空白等于border-width的取值
groove槽状(定义 3D 凹槽边框。其效果取决于 border-color 的值。)
ridge脊状,和groove相反(定义 3D 垄状边框。其效果取决于 border-color 的值。)
inset凹陷(定义 3D inset 边框。其效果取决于 border-color 的值。)
outset凸出,和inset相反(定义 3D outset 边框。其效果取决于 border-color 的值。)
inherit规定应该从父元素继承边框样式

1.3 Qt样式表中的伪类和伪元素

二、编写基本的Qt样式表

2.1 在Qt应用程序中引入样式表文件的方式

2.2 设置基本的背景色、字体样式等

三、Qt样式表的高级应用技巧

3.1 使用选择器和属性选择器来更精确地定位元素

3.2 使用伪类和伪元素来实现特定的效果

3.3 使用层叠样式表(QSS)选择器和属性

四、Qt样式表的调试和优化

4.1 使用Qt的样式编辑器

4.2 使用Qt Creater的视觉调试工具

4.3 实时预览和调试样式表

五、不同控件样式表语法

5.1 QComboBox

5.1.1 设置下拉框框体

"QComboBox {"
                "max-height: 30px;"
                "min-height: 30px;"
                "background-color: #ffffff;"
                "border: 1px solid gray;"
                "border-radius: 3px;"
                "padding: 1px 18px 1px 3px;"
                "min-width: 6em; }"

5.1.2 设置下拉框窗体子项

 "QComboBox QAbstractItemView::item{height: 80px;}"

注意:

  • QComboBox QAbstractItemView::item来修改item的样式,前提必须调用comboBox->setView(new QListView()); 才会生效。 我们看到虽然高度修改为50了,但是文字大小需要重新设置,此时comboBox->setFont(font);不会影响到下拉框的Item文字

5.1.3 设置下拉框窗体

 "QComboBox QAbstractItemView {"
                "max-height: 200px;"
                "min-height: 200px;"
                "outline: 10px solid;" /*分割线*/
                "border: 1px solid;"
                "color: black;"
                "background-color: #124879;"
                "selection-background-color:#0a386e;"
                "}"

注意:

  • 在 Qt 的 QComboBox 中,设置下拉框展开后(即下拉列表)的高度并不直接通过属性或方法来实现,因为 QComboBox 本身并没有直接控制下拉列表高度的属性。但是,你可以通过一些间接的方式来影响或控制这个高度。

ui->m_qcombxType->setMaxVisibleItems(10); // 设置最多可见10个项目

六、实例演示


总结

  总的来说,学习Qt控件样式表可以使我们更加灵活地定制和美化界面。通过使用样式表,我们可以改变控件的外观、字体、边框等属性,还可以根据控件的状态来改变其样式,提供更好的用户体验。希望本博客对你学习Qt控件样式表提供了帮助,让你在应用程序的界面设计和定制中更加自如。祝你学习愉快!

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

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

相关文章

Anomalib:用于异常检测的深度学习库!

大家好,今天给大家介绍了一个用于无监督异常检测和定位的新型库:anomalib,Github链接:https://github.com/openvinotoolkit/anomalib 简介 考虑到可重复性和模块化,这个开源库提供了文献中的算法和一组工具,以通过即插即用的方法设计自定义异常检测算法。 Anomalib 包…

VUE+TS使用elementUI的el-checkbox双重v-for循环做勾选

html部分 <template><div class"hello"><el-form :model"elForm"> <!-- cities对象数组形式 --><el-form-item v-for"(item, topIndex) in cities" :key"topIndex"> <!--item.checked 是每一个item…

深度解析 Spring 源码:从BeanDefinition源码探索Bean的本质

文章目录 一、BeanDefinition 的概述1.1 BeanDefinition 的定位1.2 BeanDefition 的作用 二、BeanDefinition 源码解读2.1 BeanDefinition 接口的主要方法2.2 BeanDefinition 的实现类2.2.1 实现类的区别2.2.2 setBeanClassName()2.2.3 getDependsOn()2.2.4 setScope() 2.3 Bea…

用Python Turtle画一个中国结

中国结&#xff0c;作为中华民族传统文化的象征之一&#xff0c;以其独特的编织技艺和深厚的文化内涵&#xff0c;深受人们喜爱。今天&#xff0c;我们就来用Python的turtle模块&#xff0c;尝试绘制一个充满韵味的中国结。 我们先来看看整个中国结生成的过程&#xff1a; 中国…

ros2 node 之间的通信方式之 —— Topic通信案例

文章目录 ros2 node 之间的通信方式之 Topic通信Topic 通信案例1、创建工作空间2、创建功能包3、编写发布者和订阅者代码3.1 topic_helloworld_pub.cpp3.2 topic_helloworld_sub.cpp 4、编写CMakeLists.txt5、编译工作空间下的功能包6、运行结果 ros2 node 之间的通信方式之 To…

2024年,如何实现高效的自动化渗透测试?

随着当前网络安全威胁的不断扩展与升级&#xff0c;开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而&#xff0c;传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求&#xff0c;企业需要投入较大的时间和资源才能完成。在此…

Seata分布式事务使用!!!!

1.版本说明 版本说明 alibaba/spring-cloud-alibaba Wiki GitHub 2.建立Seata Server数据库&#xff08;TC-带头大哥的数据库&#xff09; incubator-seata/script/server/db at v1.6.1 apache/incubator-seata GitHub 3.业务库建表 incubator-seata/script/client/at/…

对于button按钮引发的bug

主要原因就是今天在给button按钮添加一个点击事件的时候&#xff0c;并没有声明button的type类型&#xff0c;就一直发生点击按钮但事件并不触发的问题。 触发这种问题的原因就是: 按钮默认的 type 类型是 "submit"&#xff0c;而不是 "button"。当你不显式…

探索潜力:中心化交易所平台币的对比分析

核心观点 平台币在过去一年里表现差异显著&#xff1a; 在过去的一年里&#xff0c;只有少数几个平台币如BMX、BGB和MX的涨幅超过了100%。相比之下&#xff0c;由于市值较高&#xff0c;BNB和OKB的涨幅相对较低。 回购和销毁机制在平台币价值中起决定性作用&#xff1a; 像M…

OpenHarmony实战开发-基础知识

Svg组件主要作为svg画布的根节点使用&#xff0c;也可以在svg中嵌套使用。 说明&#xff1a; svg父组件或者svg组件需要定义宽高值&#xff0c;否则不进行绘制。 创建Svg组件 在pages/index目录下的hml文件中创建一个Svg组件。 <!-- xxx.hml --> <div class"co…

[华为OD] C卷 5G网络 现需要在某城市进行5G网络建设,已经选取N个地点设置5G基站 200

题目 现需要在某城市进行5G网络建设&#xff0c;已经选取N个地点设置5G基站&#xff0c;编号固定为1到N,接 下来需要各个基站之间使用光纤进行连接以确保基站能互联互通&#xff0c;不同基站之间架设光纤的成 本各不相同&#xff0c;且有些节点之间已经存在光纤相连&#…

力扣刷题 63.不同路径 II

题干 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

(css)鼠标移出样式不变

(css)鼠标移出样式不变 需求&#xff1a;列表鼠标移入切换样式&#xff0c;移出保持不变 <divv-for"(item, index) of newsList":key"index"class"news-list":class"{active : change index}"tabindex"1"mouseenter&quo…

docker各目录含义

目录含义builder构建docker镜像的工具或过程buildkit用于构建和打包容器镜像&#xff0c;官方构建引擎&#xff0c;支持多阶段构建、缓存管理、并行化构建和多平台构建等功能containerd负责容器生命周期管理&#xff0c;能起、停、重启&#xff0c;确保容器运行。负责镜管理&am…

2024最新的,免费的 ChatGPT 网站AI(八个)

ChatGPT是美国人工智能研究实验室OpenAI在2022年11月推出的一款人工智能技术驱动的语言模型应用。它基于GPT-3.5架构&#xff08;后续还有GPT-4架构的升级版&#xff09;构建&#xff0c;拥有强大的自然语言处理能力和上下文理解能力&#xff0c;能够参与多轮对话&#xff0c;为…

恩智浦如何使用DITA

▲ 搜索“大龙谈智能内容”关注公众号▲ 作者 | John Walker - NXP销售和市场营销业务分析师 2013年4月18日 作为恩智浦半导体公司销售和市场部的业务分析师&#xff0c;我负责恩智浦半导公司产品信息的数据/内容模型、流程和工具。我来自英国&#xff0c;但自2000年以来一…

Python3 循环语句

Python 中的循环语句有 for 和 while。 Python 循环语句的控制结构图如下所示&#xff1a; while 循环 Python 中 while 语句的一般形式&#xff1a; while 判断条件(condition)&#xff1a;执行语句(statements)…… 执行流程图如下&#xff1a; 同样需要注意冒号和缩进。…

go语言实现简单登陆返回token样例

目录 1、代码实现样例&#xff1a; 2、postman调用&#xff0c;获取登陆后的token&#xff1a; 1、代码实现样例&#xff1a; package mainimport ("net/http""time""github.com/dgrijalva/jwt-go""github.com/gin-gonic/gin" )var …

Leetcode—2639. 查询网格图中每一列的宽度【简单】

2024每日刷题&#xff08;121&#xff09; Leetcode—2639. 查询网格图中每一列的宽度 实现代码 class Solution { public:int func(int num) {if(num 0) {return 1;}int len 0;while(num ! 0) {len;num / 10;}return len;}vector<int> findColumnWidth(vector<ve…

怎么通过isinstance(Obj,Class)验证?【isinstance】

最近有这样一个项目&#xff0c;这个项目可以用一个成熟的项目的构造树&#xff0c;读取树&#xff0c;再检索的过程&#xff0c;现在有新的需求&#xff0c;另一个逻辑构造同样节点结构的树&#xff0c;pickle序列化保存&#xff0c;再使用原来项目的读取、检索函数&#xff0…
最新文章