当前位置: 首页 > news >正文

【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上会在状态栏中显示的提示信息
toolTipDuringtoolTip 显⽰的持续时间
statusTipWidget 状态发⽣改变时显⽰的提⽰信息(⽐如按钮被按下等).
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 。如果任一值在数组中出现 至少两次 &#xff0c;返回 true &#xff1b;如果数组中每个元素互不相同&#xff0c;返回 false 。 AC代码 class Solution { public:bool containsDuplicate(vector<int>& nums) {// …...

嵌入式软件工作能力

1. 工作能力 技术能力强&#xff0c;并不代表工作能力 2. 流程把控 3. 项目管理 4. “找茬”能力 5. 文档输出能力...

景区导航导览系统:基于AR技术+VR技术的功能效益全面解析

在数字化时代背景下&#xff0c;游客对旅游体验的期望不断提升。游客们更倾向于使用手机作为旅行的贴身助手&#xff0c;不仅因为它能提供实时、精准的导航服务&#xff0c;更在于其融合AR&#xff08;增强现实&#xff09;、VR&#xff08;虚拟现实&#xff09;等前沿技术&…...

Mybatis-Plus代码生成器配置方法

Mybatis-Plus网址&#xff1a;https://baomidou.com/pages/779a6e/#%E4%BD%BF%E7%94%A8 第一步&#xff1a;引入依赖 <!-- 代码生成器 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId>…...

三主机部署HP Anyware Manager服务

一、序言 在部署拓扑和方案方面&#xff0c;HP Anyware Manager 非常灵活&#xff0c;可以部署在单个主机中&#xff0c;也可以部署在多个主机中&#xff0c;具体取决于组织的网络环境和运营要求。 二、单主机部署 2.1 描述 此部署配置是当 Anyware Manager 和 MongoDB 以及…...

Grafana :利用Explore方式实现多条件查询

背景 日志统一推送到Grafana上管理。所以&#xff0c;有了在Grafana上进行日志搜索的需求&#xff0c;而进行日志搜索通常需要多条件组合。 解决方案 通过Grafana的Explore的方式实现多条件查询。 直接看操作步骤&#xff1a; 在主页搜索框中输入“Explore” 进入这个界面…...

腾讯技术创作特训营 -- SUPERWINNIE -- AI重塑社交内容

目录 1 什么是AI社交内容 2 案例拆解 3 用LLM做爆文选题 4 用LLM出爆文脚本提示词 1 什么是AI社交内容 任何一个因素被AI取代都是AI社交内容 2 案例拆解 数字人 资讯素材 录屏产品的素材&#xff08;小红书测试AI产品&#xff09; 脚本 素材 剪辑 3 用LLM做爆文选题 &…...

AV1技术学习: Compound Prediction

一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中&#xff0c;权重m(x, y) is scaled by 64 以进行整数计算&#xff0c;R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…...

watch监听vue2与vue3的写法

watch的属性值 handler:回调函数, 即监听到变化时应该执行的函数&#xff0c;可以是单独的函数或带有 immediate 和 deep 属性的对象watch: {someProperty: function(newVal, oldVal) {// 处理逻辑}}deep: 其值是true或false, 当属性值是对象或数组时&#xff0c;深度观察会监…...

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 循环遍历字典&#xff08;1&#xff09; 遍历字典的键(2)遍历字典的值(3)遍历字典的键和值 4.练习题&#xff08;1&#xff09;班级成绩单&#xff08;2&#xff09;最出名的城市&#xff08;3&#xff09;修改成绩&#xff08;…...

今日总结:雪花算法,拉取在线用户

雪花算法&#xff1a; public class SnowflakeIdGenerator {private final long epoch 1626804000000L; // 定义起始时间戳&#xff0c;这里设置为2021-07-21 00:00:00 UTCprivate final long workerIdBits 5L; // 机器ID所占的位数private final long sequenceBits 10L; /…...

前瞻断言与后瞻断言:JavaScript 正则表达式的秘密武器

JavaScript 中的前瞻断言&#xff08;lookahead&#xff09;和后瞻断言&#xff08;lookbehind&#xff09;相信用过的小伙伴就知道它的威力了&#xff0c;在一些特定的需求场景下&#xff0c;可以做到四两拨千斤的作用&#xff0c;今天让我们来盘点一下在 JavaScript 正则表达…...

昇思MindSpore学习总结十六 —— 基于MindSpore的GPT2文本摘要

1、mindnlp 版本要求 !pip install tokenizers0.15.0 -i https://pypi.tuna.tsinghua.edu.cn/simple # 该案例在 mindnlp 0.3.1 版本完成适配&#xff0c;如果发现案例跑不通&#xff0c;可以指定mindnlp版本&#xff0c;执行!pip install mindnlp0.3.1 !pip install mindnlp …...

React Router 6笔记

一个路由就是一个映射关系 key为路径&#xff0c;value可能是function或component 路由分类 后端路由&#xff08;node&#xff09; value是function&#xff0c;用来处理客户端提交的请求注册路由&#xff1a;router.get(path, function(req, res))工作过程&#xff1a;当…...

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中&#xff0c;数据监听是通过ES5的Object.defineProperty实现的。Vue在初始化数据对象时&#xff0c;会遍历data对象&#xff0c;并使用Object.defineProperty为每个属性设置getter和setter。当你尝试读取或修改数据属性时&#xff0c;这些g…...

kafka开启kerberos和ACL

作者&#xff1a;恩慈 一、部署kafka-KB包 1&#xff0e;上传软件包 依次点击 部署中心----部署组件----上传软件包 选择需要升级的kafka版本并点击确定 2&#xff0e;部署kafka 依次点击部署中心----部署组件----物理/虚拟机部署----选择集群----下一步 选择手动部署-…...

QT+winodow 代码适配调试总结(三)

问题描述: 1、开发测试环境为: A: window10 64位 B: QT版本为4.8.6 C:采用VS2017 C++ Compiler 9.0 (x86)编译器版本 根据总结(二)经验,开发环境的可执行程序显示正常; 2、新的环境运行的时候显示乱码; 经过查阅资料,还是代码环境编码配置的问题,下面为解…...

Linux之旅:常用的指令,热键和权限管理

目录 前言 1. Linux指令 &#xff08;1&#xff09; ls &#xff08;2&#xff09; pwd 和 cd &#xff08;3&#xff09;touch 和 mkdir &#xff08;4&#xff09; rmdir 和 rm &#xff08;5&#xff09;cp &#xff08;6&#xff09;mv &#xff08;7&#xff09;…...

专业做网站制作自助建站系统/平台推广销售话术

写在前面 本文接k8s之ingress 。 本文看一个基于ingress作为流量入口的实战例子&#xff0c;架构图如下&#xff1a; 接下来详细看下。 1&#xff1a;部署MariaDB 首先我们需要定义MariaDB使用的configmap&#xff0c;如下&#xff1a; apiVersion: v1 kind: ConfigMap meta…...

wordpress文章标题后显示栏目标题/郑州谷歌优化外包

火车实时管理系统模型 我先把代码和AKP文件链接贴出来apk文件代码&#xff0c;解压后用Android studio打开设计一套火车管理系统&#xff0c;并能合理的调度火车的运行系统&#xff0c;并能提供购票系统&#xff0c;用户邮箱能获得购票信息详细功能描述&#xff1a;该火车管理系…...

厦门网站建设方案报价/站长工具seo推广秒收录

new words&#xff1a; picnic n. 野餐 vi. 去野餐 过去式 picnicked过去分词 picnicked现在分词 picnicking复数 picnics第三人称单数 picnics bamboo n. 竹&#xff0c;竹子 vt. 为…装上篾条 adj. 竹制的&#xff1b;土著居民的 复数 bamboos On the go Do you wanna…...

wordpress的网站怎样添加地图坐标/广州营销型网站

MappedByteBuffer是一种效率低于零拷贝&#xff0c;但高于传统IO的IO操作。 算是一种弥补transferTo零拷贝时无法中间处理源数据的手段。。效率低于零拷贝&#xff0c;但高于使用普通堆外内存&#xff08;DirectByteBuffer&#xff09; 正文&#xff1a; 其实MappedByteBuff…...

wordpress 代码框/防疫管控优化措施

1.字符方式读写函数fgetc( )和fputc( ) 逐个字符读写函数&#xff0c;fgetc函数实现从fp所指式的磁盘文件读入一个字符待ch。 函数调用格式&#xff1a; chfgetc(fp); //该函数的功能于getchar()函数功能相似&#xff0c;从键盘上读取一个字符&#xff1b; fgetc函数实现把…...

制作动画片的软件/哈尔滨百度关键词优化

仅供参考 1&#xff0c;js&#xff1a; onShareAppMessage(res) {return {title: 我在使用俺搜找客户&#xff0c;10万材料人都在用&#xff0c;就差你了,path: /pages/index,success: function(res) {// 转发成功console.log(res)},fail: function(res) {// 转发失败console.l…...