08.QT控件:QWidget

一、Widget 简介

        Widget 是 Qt 中的核⼼概念.。英⽂原意是 "小部件",我们此处也把它翻译为 "控件"。控件是构成⼀个图形化界⾯的基本要素。
        Qt 作为⼀个成熟的 GUI 开发框架, 内置了⼤量的常⽤控件。并且 Qt 也提供了 "⾃定义控件" 的能⼒,可以让开发者在现有控件不能满⾜需求的时候, 对现有控件做出扩展,,或者⼿搓出新的控件。

二、QWidget介绍

1. 简介

        在 Qt 中, 使⽤ QWidget 类表⽰ "控件",像按钮、视图、输⼊框、滚动条等具体的控件类,都是继承⾃ QWidget.。可以说, QWidget 中就包含了 Qt 整个控件体系中 通⽤的部分

2. 常用核心属性介绍

2.1 enabled

所谓 “禁用” 指的是该控件不能接收任何用户的输⼊事件,并且外观上往往是灰⾊的。
如果⼀个 widget 被禁用,则该 widget 的子元素也被禁用。

2.2 geometry

x 横坐标
y 纵坐标
width 宽度
height ⾼度

2.3 window frame的影响

(1)window frame简介
        window frame(窗口框架)通常指的是窗口的外部边框部分,包括窗口的标题栏、边框和窗口控制按钮(最小化、最大化、关闭按钮等)
(2)window frame的影响
        如果 widget 作为⼀个窗⼝ (带有标题栏,最⼩化,最⼤化,关闭按钮),那么在计算尺⼨和坐标的 时候就有两种算法,包含 window frame 和 不包含 window frame:
其中 x(),y(),frameGeometry(),pos(),move() 都是按照包含 window frame 的⽅式来计算的。
其中 geometry(),width(),height(),rect(),size() 则是按照不包含 window frame 的⽅式来计算的。
当然, 如果⼀个不是作为窗⼝的 widget , 上述两类⽅式得到的结果是⼀致的。

2.4 windowTitle

注意:上述设置操作针对不同的 widget 可能会有不同的⾏为。如果是顶层 widget (独⽴窗⼝),这个操作才会有效,如果是子widget,这个操作⽆任何效果。

2.5 windowIcon

注意:同 windowTitle,上述操作仅针对顶层 widget 有效。
2.5.1 QIcon图标类
        QIcon是 Qt 中用于表示图标的类。它用于加载、显示和管理图标,可以在按钮、工具栏、菜单等各种用户界面元素中使用。
(1)建议在栈上创建:QIcon本身是一个比较小的对象,创建目的是为了设置到某个QWidget内,QIcon本身是否释放不会影响图标最终的显示。
(2)QIcon不支持对象树机制,无法为其挂载父对象。
(3)创建方式:QIcon icon("图片路径");路径不要带中文;使用'/'或'\\'作为路径分隔。
2.5.2 qrc机制
使用QIcon("图片路径")加载图标,存在两个问题:
(1)需要确保图片所在的路径在目标用户机上存在;
(2)需要确保图片不会被丢失;
qrc机制就是从根本上解决上述两个问题:
(1)给项目引入一个额外的xml文件(后缀名使用.qrc表示);
(2)在这个xml中将要使用的图片导入进来,并在xml中进行记录;
(3)QT在编译项目时,会根据qrc中描述的图片信息,找到图片内容并取出图片的二进制数据;
(4)将二进制数据转换为C++代码,编译到最终的.exe中;
qrc缺点:
(1)无法导入太大的资源文件;
(2)使.exe程序更大;
qrc使用示例:
(1)新建Qt Resource File
(2)将图片导入qrc文件中
        1)创建“前缀”(Prefix)
        所谓的“前缀”可以理解为虚拟的目录,这个目录并没有在电脑上真实存在,而是由Qt抽象出来。
        2)将图片导入到资源文件中

        注意:需要确保导入的图片必须在.qrc文件的同级目录,或同级目录中的子目录中。看到如图中所示的虚拟目录和图片,则说明导入成功。

(3)使用qrc文件中的图片数据

        图片加载路径使用':'开头,即表示使用qrc中的图片资源。

        此时我们查看编译生成的文件中,并没有该图片,但是会多出一个qrc_xxxxx.cpp文件:

        打开这个文件,能够看到一个qt_resource_data数组,里面存储的就是Title1.jpg这个图片每个字节数据:

        当Qt项目进行编译时,这个cpp文件就会被一起编译到exe程序中,当exe程序运行时,图片数据也就同步被加载到了内存中,避免资源丢失情况。

2.6 windowOpacity(透明度)

        写一个简单的程序,每次减少或增加0.1不透明度,通过QDebug输出每次修改后的界面不透明度,会发现得到类似以下结果:

(1)增加到1时,继续增加将会维持为1不再改变;减少到0后,继续减少将会维持为0不再改变;
(2)真实的数值并没有严格的减少或增加0.1(C++中float类型遵守IEEE 754标准,存储和计算导致的精度丢失)

2.7 cursor(鼠标光标)

(1)通过ui界面修改控件cursor属性

(2)通过代码修改控件cursor属性

        Qt中内置的光标:

(3)设置自定义光标
①将图片导入qrc资源文件(参考2.5.2qrc机制)
②访问到图片:
        Qt中存在多种表示图片的对象,这里以QPixmap为例: QPixmap pixmap(":/image1.jpg");
③使用图片构造QCursor对象: QCursor cursor(pixmap);

注意:此时鼠标点击生效位置默认是图片的左上角

④设置光标热点位置: QCursor customCursor(cursorPixmap, hotX, hotY);
        热点:鼠标点击时,鼠标图标的响应位置
        hotX、hotY是热点相对于图标左上角原点位置,单位为像素
其他可控操作:
①缩放图片大小
QPixmap pixmap(":/image1.jpg");
pixmap = pixmap.scaled(100, 100);

注意:缩放不是修改图片本身,而是返回一个新的图片副本,所有需要重新赋值。

②免费图标获取推荐:阿里巴巴 矢量图标库

2.8 font

font:

QFont:

2.9 toolTip(悬停提示)

2.10 focusPolicy

设置控件获取到焦点的策略,比如某个控件能否用鼠标选中或者能否通过tab键选中。

Qt::FocusPolicy是一个枚举类型,取值如下:
        Qt::NoFocus:控件不会接收键盘焦点;
        Qt::TabFocus:控件可以通过Tab键接收焦点;
        Qt::clickFocus:控件在鼠标点击时接收焦点;
        Qt::strongFocus:控件可以通过Tab键和鼠标点击接收焦点(默认值);
        Qt::wheelFocus:类似于Qt::StrongFocus,同时控件也可以通过鼠标滚轮获取到焦点(新增的选项,一般很少使用)。

2.11 styleSheet

        QSS(Qt Style Sheets)是Qt框架中用于样式定义的机制,类似于CSS(Cascading Style Sheets)。它允许开发者通过类似于CSS的语法来自定义和控制Qt应用程序中UI元素的外观和风格,包括但不限于窗口、按钮、文本框等组件的背景、字体、边框、大小等属性。
        后续会详细介绍qss使用。

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

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

相关文章

Mysql简述

Java - sql语句学习 sql分类 sql语句 sql数据类型

2024考古之还在用原始JDBC开发 手搓 案例 实现一个模块的增删改

JDBC案例 将来如果完成的话 就代表对JDBC里面的知识点全部融会贯通了 其实就是对数据的增删改查 我们入门做不出来前端的内容 很正常 准备环境 建表 use mybatis;create table tbl_brand (id int primary key auto_increment,brand_name varchar(20),company_name varcha…

java数据结构-链表经典习题

前言 上一篇讲解了链表的基本操作详解,接下来练习一下链表的应用。 目录 1.删除链表中等于给定值 val 的所有节点。 题解思路 2.反转一个单链表 思路分析 画图分析 代码实现 3.链表的中间结点 思路分析 画图分析 代码实现 4.链表中倒数最后k个结点 第一解决…

RS-485和RS-422通信的3.3V低功耗收发器MAX3483

描述 多数公司的MAX3483速率为:250kbps; Analog Devices公司的MAX3483速率为10Mbps。 国产MAX3485外观和丝印 该MAX3483ESA为15kV ESD保护、3.3V、低功耗收发器,用于RS-485和RS-422通信。 每个设备包含一个驱动器和一个接收器。 该MAX3483E…

Open3D通过索引提取点云

目录 一、概述 二、代码实现 2.1关键函数 2.2 完整代码 三、实现效果 3.1原始点云 3.2提取后点云 一、概述 在 Open3D 中,通过索引提取点云是一种常见且有效的操作,特别适用于需要处理点云子集的场景,例如提取特定区域的点、降采样、或…

CPsyCoun:心理咨询多轮对话自动构建及评估方法

CPsyCoun: A Report-based Multi-turn Dialogue Reconstruction and Evaluation Framework for Chinese Psychological Counseling 在大模型应用于心理咨询领域,目前开源的项目有: https://github.com/SmartFlowAI/EmoLLM (集合,…

query2doc:用大模型做query检索拓展

原文: 前沿重器[38] | 微软新文query2doc:用大模型做query检索拓展 比较主流的检索方案: 字面检索(sparse,稀疏)向量检索(dense,稠密) query对文档文段的召回&#xff…

如何在Ubuntu上安装WordPress

如何在Ubuntu上安装WordPress 执行系统更新 apt update && apt upgrade第一步 安装 Apache apt install apache2确认 Apache 安装是否成功. systemctl status apache2安装成功后 打开浏览器输入 http://server-ip-address 第二步 安装 MySQL apt install mariad…

大模型揭秘:AI与CatGPT在实体识别中的创新应用

摘要 尽管大规模语言模型 (LLM) 在各种 NLP 任务上已经取得了 SOTA 性能,但它在 NER 上的性能仍然明显低于监督基线。这是由于 NER 和 LLMs 这两个任务之间的差距:前者本质上是序列标记任务,而后者是文本生成模型。在本文中,我们…

劳易测应用案例:包装机械设备风险评估

提起机器风险评估,客户经常会问 “机器存在哪些风险?”、“如何识别并防止风险?”、“如何依据安全标准对机器进行改造与升级?”以及“如何确保机器符合安全要求?等等。 机器风险评估是什么? 机器风险评估是…

鸿蒙HarmonyOS服务卡片实战

引言 在现代开发中,服务卡片是不可或缺的一部分,比如音乐,天气类等应用,官网的介绍中写道:卡片让您便捷地预览服务信息,例如查看天气或日历日程等内容。您可将卡片添加到屏幕上,让这类信息触手…

【大数据】Hadoop学习笔记

基本概念 Hadoop组成 HDFS: Hadoop分布式文件存储系统, 在Haddop中处于底层/核心地位YARN: 分布式通用的集群资源管理系统和任务调度平台, 支撑各种计算引擎执行MapReduce: 第一代分布式计算引擎, 但因为部分原因, 许多企业都不直接使用MapReduce, 但许多底层软件仍然在使用Ma…

SQL Server - ROLLUP、GROUPING、CUBE、GROUPING SET

文章目录 SQL Server - ROLLUP、GROUPING、CUBE、GROUPING SETROLLUP函数GROUPING函数GROUPING SET函数CUBE函数网上例子 写在前面:如果我们想要对分组之后的数据进行类似小计的计算,那么就需要使用到下面的函数 SQL Server - ROLLUP、GROUPING、CUBE、G…

PR模板 | RGB特效视频标题模板Titles | MOGRT

RGB特效视频标题模板mogrt免费下载 4K分辨率(38402160) 支持任何语言 友好的界面 输入和输出动画 快速渲染 视频教程 免费下载:https://prmuban.com/39055.html 更多pr模板视频素材下载地址:https://prmuban.com

【网络协议】精讲TCP通信原理!图解超赞超详细!!!

亲爱的用户,打开微信,搜索公众号:“风云说通信”,即可免费阅读该文章~~ 目录 1. 建立连接 2. 数据传输 3. 断开连接 4. 抓包分析 前言 TCP 把连接作为最基本的对象,每一条 TCP 连接都有两个端点,这种端…

【Day02】0基础微信小程序入门-学习笔记

文章目录 模板与配置学习目标WXML 模板语法1.数据绑定(类似于 Vue2 )2. 事件绑定3. 条件渲染4.列表渲染 WXSS模板样式1. rpx尺寸单位2.样式导入3. 全局样式和局部样式 全局配置1. window2. tabBar 页面配置网络数据请求总结 持续更新~ 模板与配置 学习目…

《第一行代码 第3版》学习笔记——第十一章 网络技术

1 webview用法 class MainActivity : ComponentActivity() {SuppressLint("SetJavaScriptEnabled")override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {NetWorkDemoTheme {// A surface container using the bac…

GandCrab5.2勒索病毒复现

GandCrab第一代勒索病毒首次出现于2018年1月,后面经历了五个大版本的更新迭代,该系列病毒特征是采用RSAAES加密算法,从算法上分析解密难度较大,会将系统中的大部分文件加密为随机后缀名的文件,然后对用户进行勒索。本实…

国内邮件推送如何避免拦截?内容优化技巧?

国内邮件推送的平台怎么选择?如何提高邮件推送效果? 邮件营销是企业与客户沟通的重要方式,但在国内邮件推送过程中,邮件被拦截的问题屡见不鲜。为了确保邮件能够顺利送达目标用户,AokSend将探讨一些有效的策略&#x…

【亲测好用】神级PSAI插件大揭秘:三款创成式修图神器,让你解放双手

PsBeta被停用后,小编一直想找到能够平替PsBeta创成式填充功能的插件。 功夫不负有心,终于被我找到啦,现在就给大家揭秘这三款宝藏修图神器,希望能够帮到大家。 1.插件名称:Starai 无需科学上网,还自带提示…