【Qt】常用控件 Q widget的enabled属性,geometry属性
Qt是一个实现图形化程序的程序。为了便于我们开发,Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。
一.什么是控件
控件是构成⼀个图形化界⾯的基本要素.
示例一:
像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动条,下拉框等,都可以称为"控 件".
示例二:Qt designer中的控件
Qt作为⼀个成熟的GUI开发框架,内置了⼤量的常⽤控件.并且Qt也提供了"⾃定义控件"的能⼒,可以让程序猿在现有控件不能满⾜需求的时候,对现有控件做 出扩展,或者⼿搓出新的控件。
二.QWidget核心属性
在Qt中,使⽤QWidget类表⽰"控件".像按钮,视图,输⼊框,滚动条等具体的控件类,都是继承自QWidget.
可以说,QWidget中就包含了Qt整个控件体系中,通⽤的部分.
在Qt Designer中,随便拖⼀个控件过来,选中该控件,即可在右下⽅看到QWidget中的属性
这些属性,既可以通过Qt designer直接修改,也可以通过代码修改。
注:想了解具体属性及含义,可以再帮助文档中查询。
1.简述Qwidget核心属性
表格中列出来核心属性及其作用:
属性 | 作用 |
enabled | 表示控件是否可用。true表示可用,false表示不可用 |
geometry | 位置和尺寸,包含x,y,width,height 四个部分. 其中坐标是以⽗元素为参考进⾏设置的. |
windowTitle | 设置widget标题 |
windowlcon | 设置widget图标 |
windowOpacity | 设置widget透明度 |
cursor | 鼠标悬停时的图标形状 |
font | 字体相关属性 |
toolTip | 鼠标悬停在widget上会在状态栏中显示的提示信息 |
toolTipDuring | toolTip 显⽰的持续时间 |
statusTip | Widget 状态发⽣改变时显⽰的提⽰信息(⽐如按钮被按下等). |
styleSheet | 允许使⽤ CSS来设置widget 中的样式. |
focusPolicy | 该 widget 如何获取到焦点. Qt::NoFocus:控件不参与焦点管理,即⽆法通过键盘或⿏标获取焦点 Qt::TabFocus:控件可以通过Tab键获得焦点 • • • Qt::ClickFocus:控件可以通过⿏标点击获得焦点 • Qt::StrongFocus:控件可以通过键盘和⿏标获得焦点 • Qt::WheelFocus:控件可以通过⿏标滚轮获得焦点(在某些平台或样式中可能不可 ⽤) |
windowModality | 指定窗⼝是否具有"模态"⾏为. |
accessibleName | 设置widget的可访问名称.这个名称可以被辅助技术(像屏幕阅读器)获取到.这个属性⽤于实现⽆障碍程序的场景中(也就是给盲⼈写的程序). |
接下来让我们详细了解每个属性吧。
三.QWidget的enabled属性
1.概念
enabled属性用于表示部件是否可用,一个可用的部件可以接收和处理鼠标和键盘事件,当部件不可用时则无法接收和处理鼠标和键盘事件。
2.API
api | 作用 |
isEnabled() | 获取到控件的可⽤状态. |
setEnabled() | 设置控件是否可使⽤.true 表⽰可⽤,false 表⽰禁⽤. |
• 所谓"禁⽤"指的是该控件不能接收任何⽤⼾的输⼊事件,并且外观上往往是灰⾊的.
• 如果⼀个widget被禁⽤,则该widget的⼦元素也被禁⽤.
3.代码示例
eg1:使⽤代码创建⼀个禁⽤状态的按钮
结果:
eg2:通过按钮2切换按钮1的禁⽤状态
步骤一:在designer中创建两个按钮,并右键,为其创建槽函数
步骤2:编写对应槽函数
QObject 的 objectName 属性介绍:
obiectName是QObject的重要属性。Qwidget继承QObject,也具有了该属性。
在⼀个 Qt 程序中,objectName 相当于对象的⾝份标识, 彼此之间不能重复.
在使⽤ Qt Designer 时,尤其是界⾯上存在多个widget 的时候,可以通过objectName 获 取到指定的widget对象.
结果:
四.geometry属性
1.概念
位置和尺寸。本质是四个属性的统称:
• x 横坐标
• y 纵坐标
• width 宽度
• height ⾼度
如图示:
注:
1.实际开发中,我们并不会直接使⽤这⼏个属性,⽽是通过⼀系列封装的⽅法来获取/修改
2.Qt坐标系为左手坐标系,左上角为原点。
2.API
api | 作用 |
geometry() | 获取到控件的位置和尺⼨. 返回结果是⼀个QRect,包含x,y,width,height.其 中 x, y是左上⻆的坐标. |
setGeometry(QRect) setGeometry(int x,int y, int width,int height) | 设置控件的位置和尺⼨. 可以直接设置⼀个QRect, 也可以分四个属性单独设置. |
3.代码示例
eg1:控制按钮的位置
步骤一:在designer界⾯中拖五个按钮.
步骤二:转到按钮clicked()信号对应的槽函数,编写代码
结果:
问题:
运行程序我们看到,点击按钮只改变target按钮左上角位置,并且会影响尺寸变化,这不是我们预期的效果。
原因:
上述代码中我们是直接设置的 QRect 中的x,y.相当于修改左上点坐标。
实际上QRect内部是存储了左上和右下两个点的坐标,再通过这两个点的坐标差值计算⻓宽. 单纯修改左上坐标就会引起整个矩形的⻓宽发⽣改变.
优化:
设置左上点坐标的同时,设置尺寸使其和之前保持一致
优化版控制按钮位置:
结果:
eg2:表白恶搞
步骤一:往界⾯上拖拽两个按钮和⼀个Label.
步骤二:编写槽函数
结果:
五.window frame 的影响
window frame 窗口框架 是操作系统自带的
1. 影响
如果 widget 作为⼀个窗⼝ (带有标题栏, 最⼩化, 最⼤化, 关闭按钮), 那么在计算尺⼨和坐标的 时候就有两种算法. 包含window frame 和 不包含 window frame.
在Qt中,关于位置尺寸,提供了很多的API 有的API的位置是以Widget本体左上角为原点的不包含 window frame.有的API的位置是以window frame为左上角为原点.
其中 x(), y(), frameGeometry(), pos(), move() 都是按照包含 window frame 的⽅式来计算的.
其中 geometry(), width(), height(), rect(), size() 则是按照不包含 window frame 的⽅式来计算的.
当然, 如果⼀个不是作为窗⼝的 widget , 上述两类⽅式得到的结果是⼀致的.
2.API
api | 作用 |
x() | 获取横坐标,计算时包含 window frame |
y() | 获取纵坐标,计算时包含 window frame |
pos() | 返回 QPoint 对象, ⾥⾯包含 x(), y(), setX(), setY() 等⽅法.计算时包含 window frame |
frame Size() | 返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法.计算时包含 window frame |
frameGeometry() | 返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y,width, size.计算时包含 window frame 对象. |
width() | 获取宽度 计算时不包含 window frame |
height() | 获取⾼度 计算时不包含 window frame |
size() | 返回 QSize 对象, ⾥⾯包含 width(), height(), setWidth(), setHeight() 等⽅法.计算时不包含 window frame |
rect() | 返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取并设置 x,y, width, size.计算时不包含 window frame 对象. |
geometry() | 返回 QRect 对象. QRect 相当于 QPoint 和 QSize 的结合体. 可以获取 x, y,width, size.计算时不包含 window frame 对象. |
setGeometry() | 直接设置窗⼝的位置和尺⼨. 可以设置 x, y, width, height, 或者 QRect 对象.计算时不包含 window frame 对象 |
3.代码示例
geometry 和 frameGeometry 的区别
步骤:创建一个按钮,查看geometry 和 frameGeometry的返回值
结果:
问题:
执行程序, 可以看到
构造函数中, 打印出的 geometry 和 frameGeometry 是相同的.
但是在点击按钮时, 打印的 geometry 和 frameGeometry 则存在差异.原因:
在构造⽅法中, Widget刚刚创建出来,还没有加⼊到对象树中.此时也就不具备 Window frame.
在按钮的slot函数中,由于⽤⼾点击的时候,对象树已经构造好了,此时Widget 已经具备了 Window frame,因此在位置和尺⼨上均出现了差异.
注意:
如果把上述代码修改成打印 pushButton 的 geometry和frameGeometry,结果就是完全相 同的.因为 pushButton 并⾮是⼀个窗⼝.
相关文章:
【Qt】常用控件 Q widget的enabled属性,geometry属性
Qt是一个实现图形化程序的程序。为了便于我们开发,Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。 一.什么是控件 控件是构成⼀个图形化界⾯的基本要素. 示例一: 像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动…...
Unity3d开发google chrome的dinosaur游戏
游戏效果 游戏中: 游戏中止: 一、制作参考 如何制作游戏?【15分钟】教会你制作Unity小恐龙游戏!新手15分钟内马上学会!_ unity教学 _ 制作游戏 _ 游戏开发_哔哩哔哩_bilibili 二、图片资源 https://download.csdn.…...
【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)
空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据(均可查看之前的文章获悉详情)! 本次我们分享的是我国2013——2022年的省…...
【玩转C语言】第五讲--->数组-->一维和多维深度理解
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 引言: 大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识…...
Apache Flink 任务提交模式
Flink 任务提交模式 Flink可以基于多种模式部署:基于Standalone 部署模式,基于Yarn部署模式,基于Kubernetes部署模式以上不同集群部署模式下提交Flink任务会涉及申请资源,各角色交互过程,不同模式申请资源涉及到的角色…...
Ubuntu22.04安装OMNeT++
一、官网地址及安装指南 官网地址:OMNeT Discrete Event Simulator 官网安装指南(V6.0.3):https://doc.omnetpp.org/omnetpp/InstallGuide.pdf 官网下载地址:OMNeT Downloads 旧版本下载地址:OMNeT Old…...
Matlab课程设计——手指静脉识别项目
手指静脉识别项目 项目方案设计介绍 本项目实现手指图像的处理和匹配算法,需要处理的数据是本人不同手指的图像,首先经过图像处理,使得指静脉的纹理增强凸显处理,然后将所有的这些图像进行相互间的匹配,检验类内和类…...
centos软件安装
安装方式 一、二进制安装 --解压即用,只针对特殊平台 --jdk tomcat 二、RPM:按照一定规范安装软件,无法安装依赖的文件 --mysql 三、yum:远程安装基于RPM,把依赖的文件安装上去,需要联网 四、源码安装 jdk安…...
力扣 217. 存在重复元素,389. 找不同,705. 设计哈希集合,3. 无重复字符的最长子串,139. 单词拆分
217. 存在重复元素 题目 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 AC代码 class Solution { public:bool containsDuplicate(vector<int>& nums) {// …...
嵌入式软件工作能力
1. 工作能力 技术能力强,并不代表工作能力 2. 流程把控 3. 项目管理 4. “找茬”能力 5. 文档输出能力...
景区导航导览系统:基于AR技术+VR技术的功能效益全面解析
在数字化时代背景下,游客对旅游体验的期望不断提升。游客们更倾向于使用手机作为旅行的贴身助手,不仅因为它能提供实时、精准的导航服务,更在于其融合AR(增强现实)、VR(虚拟现实)等前沿技术&…...
Mybatis-Plus代码生成器配置方法
Mybatis-Plus网址:https://baomidou.com/pages/779a6e/#%E4%BD%BF%E7%94%A8 第一步:引入依赖 <!-- 代码生成器 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId>…...
三主机部署HP Anyware Manager服务
一、序言 在部署拓扑和方案方面,HP Anyware Manager 非常灵活,可以部署在单个主机中,也可以部署在多个主机中,具体取决于组织的网络环境和运营要求。 二、单主机部署 2.1 描述 此部署配置是当 Anyware Manager 和 MongoDB 以及…...
Grafana :利用Explore方式实现多条件查询
背景 日志统一推送到Grafana上管理。所以,有了在Grafana上进行日志搜索的需求,而进行日志搜索通常需要多条件组合。 解决方案 通过Grafana的Explore的方式实现多条件查询。 直接看操作步骤: 在主页搜索框中输入“Explore” 进入这个界面…...
腾讯技术创作特训营 -- SUPERWINNIE -- AI重塑社交内容
目录 1 什么是AI社交内容 2 案例拆解 3 用LLM做爆文选题 4 用LLM出爆文脚本提示词 1 什么是AI社交内容 任何一个因素被AI取代都是AI社交内容 2 案例拆解 数字人 资讯素材 录屏产品的素材(小红书测试AI产品) 脚本 素材 剪辑 3 用LLM做爆文选题 &…...
AV1技术学习: Compound Prediction
一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中,权重m(x, y) is scaled by 64 以进行整数计算,R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…...
watch监听vue2与vue3的写法
watch的属性值 handler:回调函数, 即监听到变化时应该执行的函数,可以是单独的函数或带有 immediate 和 deep 属性的对象watch: {someProperty: function(newVal, oldVal) {// 处理逻辑}}deep: 其值是true或false, 当属性值是对象或数组时,深度观察会监…...
docker搭建普罗米修斯监控gpu
ip8的服务器监控ip110和ip111的服务器 被监控的服务器110和111只需要安装node-export和nvidia-container-toolkit 下载镜像包 docker pull prom/node-exporter docker pull prom/prometheus docker pull grafana/grafana新建目录 mkdir /opt/prometheus cd /opt/prometheus/…...
像 MvvmLight 一样使用 CommunityToolkit.Mvvm 工具包
文章目录 简介一、安装工具包二、实现步骤1.按照MvvmLight 的结构创建对应文件夹和文件2.编辑 ViewModelLocator3.引用全局资源二、使用详情1.属性2.命令3. 消息通知4. 完整程序代码展示运行结果简介 CommunityToolkit.Mvvm 包(又名 MVVM 工具包,以前称为 Microsoft.Toolkit…...
python入门课程Pro(2)--循环
循环 第1课 for循环的基本操作1.循环2.遍历3.for 循环遍历字典(1) 遍历字典的键(2)遍历字典的值(3)遍历字典的键和值 4.练习题(1)班级成绩单(2)最出名的城市(3)修改成绩(…...
今日总结:雪花算法,拉取在线用户
雪花算法: public class SnowflakeIdGenerator {private final long epoch 1626804000000L; // 定义起始时间戳,这里设置为2021-07-21 00:00:00 UTCprivate final long workerIdBits 5L; // 机器ID所占的位数private final long sequenceBits 10L; /…...
前瞻断言与后瞻断言:JavaScript 正则表达式的秘密武器
JavaScript 中的前瞻断言(lookahead)和后瞻断言(lookbehind)相信用过的小伙伴就知道它的威力了,在一些特定的需求场景下,可以做到四两拨千斤的作用,今天让我们来盘点一下在 JavaScript 正则表达…...
昇思MindSpore学习总结十六 —— 基于MindSpore的GPT2文本摘要
1、mindnlp 版本要求 !pip install tokenizers0.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple # 该案例在 mindnlp 0.3.1 版本完成适配,如果发现案例跑不通,可以指定mindnlp版本,执行!pip install mindnlp0.3.1 !pip install mindnlp …...
React Router 6笔记
一个路由就是一个映射关系 key为路径,value可能是function或component 路由分类 后端路由(node) value是function,用来处理客户端提交的请求注册路由:router.get(path, function(req, res))工作过程:当…...
Android init 中的wait_for_property指令
Android开机优化系列文档-CSDN博客 Android 14 开机时间优化措施汇总-CSDN博客Android 14 开机时间优化措施-CSDN博客根据systrace报告优化系统时需要关注的指标和优化策略-CSDN博客Android系统上常见的性能优化工具-CSDN博客Android上如何使用perfetto分析systrace-CSDN博客A…...
智能合约语言(eDSL)—— 并行化方案——调度算法
3、调度算法 处理区块的时候,我们会同时启动多个线程去执行多个交易,这个时候我们需要一个良好的调度策略,来决定当前的线程是应该执行交易还是验证交易、提前结束还是立刻重新执行交易等,只有有一个良好调度策略才能保证所有交易都稳定有序的执行; 线程数量 这是一个不…...
vue2.0中如何实现数据监听
vue2中实现数据监听的原理 在Vue 2中,数据监听是通过ES5的Object.defineProperty实现的。Vue在初始化数据对象时,会遍历data对象,并使用Object.defineProperty为每个属性设置getter和setter。当你尝试读取或修改数据属性时,这些g…...
kafka开启kerberos和ACL
作者:恩慈 一、部署kafka-KB包 1.上传软件包 依次点击 部署中心----部署组件----上传软件包 选择需要升级的kafka版本并点击确定 2.部署kafka 依次点击部署中心----部署组件----物理/虚拟机部署----选择集群----下一步 选择手动部署-…...
QT+winodow 代码适配调试总结(三)
问题描述: 1、开发测试环境为: A: window10 64位 B: QT版本为4.8.6 C:采用VS2017 C++ Compiler 9.0 (x86)编译器版本 根据总结(二)经验,开发环境的可执行程序显示正常; 2、新的环境运行的时候显示乱码; 经过查阅资料,还是代码环境编码配置的问题,下面为解…...
Linux之旅:常用的指令,热键和权限管理
目录 前言 1. Linux指令 (1) ls (2) pwd 和 cd (3)touch 和 mkdir (4) rmdir 和 rm (5)cp (6)mv (7)…...
专业做网站制作自助建站系统/平台推广销售话术
写在前面 本文接k8s之ingress 。 本文看一个基于ingress作为流量入口的实战例子,架构图如下: 接下来详细看下。 1:部署MariaDB 首先我们需要定义MariaDB使用的configmap,如下: apiVersion: v1 kind: ConfigMap meta…...
wordpress文章标题后显示栏目标题/郑州谷歌优化外包
火车实时管理系统模型 我先把代码和AKP文件链接贴出来apk文件代码,解压后用Android studio打开设计一套火车管理系统,并能合理的调度火车的运行系统,并能提供购票系统,用户邮箱能获得购票信息详细功能描述:该火车管理系…...
厦门网站建设方案报价/站长工具seo推广秒收录
new words: picnic n. 野餐 vi. 去野餐 过去式 picnicked过去分词 picnicked现在分词 picnicking复数 picnics第三人称单数 picnics bamboo n. 竹,竹子 vt. 为…装上篾条 adj. 竹制的;土著居民的 复数 bamboos On the go Do you wanna…...
wordpress的网站怎样添加地图坐标/广州营销型网站
MappedByteBuffer是一种效率低于零拷贝,但高于传统IO的IO操作。 算是一种弥补transferTo零拷贝时无法中间处理源数据的手段。。效率低于零拷贝,但高于使用普通堆外内存(DirectByteBuffer) 正文: 其实MappedByteBuff…...
wordpress 代码框/防疫管控优化措施
1.字符方式读写函数fgetc( )和fputc( ) 逐个字符读写函数,fgetc函数实现从fp所指式的磁盘文件读入一个字符待ch。 函数调用格式: chfgetc(fp); //该函数的功能于getchar()函数功能相似,从键盘上读取一个字符; fgetc函数实现把…...
制作动画片的软件/哈尔滨百度关键词优化
仅供参考 1,js: onShareAppMessage(res) {return {title: 我在使用俺搜找客户,10万材料人都在用,就差你了,path: /pages/index,success: function(res) {// 转发成功console.log(res)},fail: function(res) {// 转发失败console.l…...