【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 并⾮是⼀个窗⼝.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OPC UA边缘计算耦合器BL205工业通信的最佳解决方案

OPC UA耦合器BL205是钡铼技术基于下一代工业互联网技术推出的分布式、可插拔、结构紧凑、可编程的IO系统,可直接接入SCADA、MES、MOM、ERP等IT系统,无缝链接OT与IT层,是工业互联网、工业4.0、智能制造、数字化转型解决方案中IO系统最佳方案。…

硅谷裸机云多IP服务器怎么样?

硅谷裸机云多IP服务器是一种在硅谷地区提供的、具有多个IP地址的裸机云服务器。这种服务器结合了裸机服务器的高性能和云服务器的灵活性,同时提供了多个IP地址,为用户的各种需求提供了支持。以下是关于硅谷裸机云多IP服务器的一些详细信息,ra…

智能硬件——0-1开发流程

文章目录 流程图1. 市场分析具体分析 2. 团队组建2. 团队组建早期团队配置建议配置一:基础型团队 (4人)配置二:扩展型团队 (6人)配置三:全面型团队 (7人) 3. 产品需求分析4. ID设计(Industrial Design, 工业设计)5. 结…

智慧监狱整体解决方案

智慧监狱整体解决方案摘要: 对智慧监狱的理解 智慧监狱通过集成监控图像资源、报警信息、安防信息和业务信息,实现资源共享和信息互通。构建三级警戒架构,实现分监区、监狱和局级监狱管理局的应急指挥和管理。 发展历程 从2006年至2021年&am…

华为云.VPC关联概念与对等连接实践

云计算.华为云 VPC关联概念与对等连接实践 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/q…

LeNet实验 四分类 与 四分类变为多个二分类

目录 1. 划分二分类 2. 训练独立的二分类模型 3. 二分类预测结果代码 4. 二分类预测结果 5 改进训练模型 6 优化后 预测结果代码 7 优化后预测结果 8 训练四分类模型 9 预测结果代码 10 四分类结果识别 1. 划分二分类 可以根据不同的类别进行多个划分,以…

新时代多目标优化【数学建模】领域的极致探索——数学规划模型

目录 例1 1.问题重述 2.基本模型 变量定义: 目标函数: 约束条件: 3.模型分析与假设 4.模型求解 5.LINGO代码实现 6.结果解释 ​编辑 7.敏感性分析 8.结果解释 例2 奶制品的销售计划 1.问题重述 ​编辑 2.基本模型 3.模…

Python酷库之旅-第三方库Pandas(036)

目录 一、用法精讲 111、pandas.Series.item方法 111-1、语法 111-2、参数 111-3、功能 111-4、返回值 111-5、说明 111-6、用法 111-6-1、数据准备 111-6-2、代码示例 111-6-3、结果输出 112、pandas.Series.xs方法 112-1、语法 112-2、参数 112-3、功能 112-…

基于Centos7搭建rsyslog服务器

一、配置rsyslog可接收日志 1、准备新的Centos7环境 2、部署lnmp环境 # 安装扩展源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo# 安装扩展源 yum install nginx -y# 安装nginx yum install -y php php-devel php-fpm php-mysql php-co…

mac二进制安装operator-sdk

0. 前置条件 1. 安装go 安装步骤略。 1. 下载operator-sdk源码包 https://github.com/operator-framework/operator-sdk 1.1 选择适合当前go版本的operator版本,在operator-sdk/go.mod文件中可以查看Operator-sdk使用的go版本。 2. 编译 源码包下载后&#x…

【从零开始实现stm32无刷电机FOC】【实践】【5/7 stm32 adc外设的高级用法】

目录 采样时刻触发采样同步采样 点击查看本文开源的完整FOC工程 本节介绍的adc外设高级用法用于电机电流控制。 从前面几节可知,电机力矩来自于转子的q轴受磁力,而磁场强度与电流成正比,也就是说电机力矩与q轴电流成正相关,控制了…

UDP网口(1)概述

文章目录 1.计算机网络知识在互联网中的应用2.认识FPGA实现UDP网口通信3.FPGA实现UDP网口通信的方案4.FPGA实现UDP网口文章安排5.传送门 1.计算机网络知识在互联网中的应用 以在浏览器中输入淘宝网为例,介绍数据在互联网是如何传输的。我们将要发送的数据包称作A&a…

SpringAI简单使用(本地模型+自定义知识库)

Ollama 简介 Ollama是一个开源的大型语言模型服务工具,它允许用户在本地机器上构建和运行语言模型,提供了一个简单易用的API来创建、运行和管理模型,同时还提供了丰富的预构建模型库,这些模型可以轻松地应用在多种应用场景中。O…

为 android编译 luajit库、 交叉编译

时间:20200719 本机环境:iMac2017 macOS11.4 参考: 官方的文档:Use the NDK with other build systems 写在前边:交叉编译跟普通编译类似,无非是利用特殊的编译器、链接器生成动态或静态库; make 本质上是按照 Make…

哈默纳科HarmonicDrive减速机组装注意事项

在机械行业中,精密传动设备HarmonicDrive减速机对于维持机械运作的稳定性和高效性起着至关重要的作用。然而在减速机的组装过程中,任何一个细微的错误都可能导致其运转时出现振动、异响等不良现象,严重时甚至可能影响整机的性能。因此&#x…

Python+Django+MySQL的新闻发布管理系统【附源码,运行简单】

PythonDjangoMySQL的新闻发布管理系统【附源码,运行简单】 总览 1、《新闻发布管理系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 程序主页面2.3 新闻新增界面2.4 文章编辑界面2.5 新闻详情页2.7 其他功能贴图 3、下载 总览 自己做的项目&…

Flink调优详解:案例解析(第42天)

系列文章目录 一、Flink-任务参数配置 二、Flink-SQL调优 三、阿里云Flink调优 文章目录 系列文章目录前言一、Flink-任务参数配置1.1 运行时参数1.2 优化器参数1.3 表参数 二、Flink-SQL调优2.1 mini-batch聚合2.2 两阶段聚合2.3 分桶2.4 filter去重(了解&#xf…

代码解读:Diffusion Models中的长宽桶技术(Aspect Ratio Bucketing)

Diffusion Models专栏文章汇总:入门与实战 前言:自从SDXL提出了长宽桶技术之后,彻底解决了不同长宽比的图像输入问题,现在已经成为训练扩散模型必选的方案。这篇博客从代码详细解读如何在模型训练的时候运用长宽桶技术(Aspect Rat…

UNiapp 微信小程序渐变不生效

开始用的一直是这个,调试一直没问题,但是重新启动就没生效,经查询这个不适合小程序使用:不适合没生效 background-image:linear-gradient(to right, #33f38d8a,#6dd5ed00); 正确使用下面这个: 生效,适合…

Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)

Python list comprehension {列表推导式 - 列表解析式 - 列表生成式} 1. Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)2. Example3. ExampleReferences Python 中的列表解析式并不是用来解决全新的问题,只是为解决已有问题提供新的语法。 列…