【Qt】深入理解QWidget常用控件: enable属性、geometry属性和window frame属性

文章目录

  • 前言:
  • 1. 什么是控件
  • 2. Qt中QWidget控件的常用属性及元编程
    • QWidget 核心属性
    • enable属性:
    • geometry 属性 :
        • window frame 窗口框架
  • 总结:

前言:

图形化界面的开发常常需要使用各种控件,而Qt作为一个强大的跨平台GUI应用程序开发框架,提供了丰富的控件库和属性,使得界面开发变得更加简单高效。本文将介绍控件的概念以及Qt中QWidget控件的常用属性及元编程方法,帮助读者快速上手Qt界面开发。

1. 什么是控件

实现图形化界面的程序,Qt中已经给我们提供了很多的“控件”
就需要学习和了解这些控件,学会如何使用这些控件。
在这里插入图片描述

编程 讲究的是“站在巨人的肩膀上”,而不是“从头发明轮子”,一个图形化界面上的内容,不需要咱们全都从零去实现. Qt中已经提供了很多内置的控件了(按钮,文本框,单选按钮,复选按钮,下拉框 … ) 界面上各种元素,各种部分的“统称”咱们拿过来就能直接使用。

2. Qt中QWidget控件的常用属性及元编程

QWidget 核心属性

Qt 中的各种控件都是就继承自QWidget 类, Qt控件体系中通用的部分
在这里插入图片描述

Qt Creator 右侧,可以看到QWidget的各种属性 ,并且在这里也能直接进行编辑,上述属性都可以通过Qt的文档来一一进行了解 。

这些属性不需要大家每个都去了解,只需要认识其中的一些常用的,重要的属性即可。

enable属性:

描述了一个控件是否处于“可用”状态,相对的概念,禁用。

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

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在同一个界面中,要求不同的控件的 objectName 也是必须不同的。(不能重复) 后续就可以通过 ui->objectName
方式来获取到对应的控件对象了。

ui->pushButton // 得到了第一个按钮对象
ui->pushButton_2 // 得到了第二个按钮对象

元编程,Qt会根据ui文件,生成一个 ui_widget.h 文件,生成的过程中会感知到,界面都有哪些控件,每个控件的objectName。

自动生成的名字,结尾是用数字命名,改成pushButton_enable 好一些。

void Widget::on_pushButton_clicked()
{qDebug() << "执行了槽函数";
}void Widget::on_pushButton_enable_clicked()
{// 切换第一个按钮的禁用状态// 1. 先获取到第一个按钮当前的可用状态bool enable = ui->pushButton->isEnabled();if (enable) {ui->pushButton->setEnabled(false);} else {ui->pushButton->setEnabled(true);}
}

在这里插入图片描述

geometry 属性 :

几何 ,可以把这个东西视为四个属性的统称:x, y, width, height
(当前控件的尺寸和位置)
在这里插入图片描述
在这里插入图片描述
Qt 中针对一些几何上的概念也进行封装。
QPoint 表示一个点
QRect 表示一个矩形
这些属于小对象,里面的属性非常少,占用空间也小,C++中用上述对象,通常会按照值的方式传递参数了。

move 只是修改位置,setGeometry 既可以修改位置,右可以修改尺寸。

void Widget::on_pushButton_up_clicked()
{// 获取到 target 本身的 geometryQRect rect = ui->pushButton_target->geometry();qDebug() << rect;
//    rect.setY(rect.y() - 5);  // 这种写法只修改 button 左上角的那个点
//    ui->pushButton_target->setGeometry(rect);ui->pushButton_target->setGeometry(rect.x(), rect.y()-5,rect.width(), rect.height()); // 平移
}void Widget::on_pushButton_down_clicked()
{QRect rect = ui->pushButton_target->geometry();qDebug() << rect;
//    rect.setY(rect.y() + 5);
//    ui->pushButton_target->setGeometry(rect);ui->pushButton_target->setGeometry(rect.x(), rect.y()+5,rect.width(), rect.height()); // 平移
}void Widget::on_pushButton_left_clicked()
{QRect rect = ui->pushButton_target->geometry();qDebug() << rect;
//    rect.setX(rect.x() - 5);
//    ui->pushButton_target->setGeometry(rect);ui->pushButton_target->setGeometry(rect.x()-5, rect.y(),rect.width(), rect.height()); // 平移
}void Widget::on_pushButton_right_clicked()
{QRect rect = ui->pushButton_target->geometry();qDebug() << rect;
//    rect.setX(rect.x() + 5);
//    ui->pushButton_target->setGeometry(rect);ui->pushButton_target->setGeometry(rect.x()+5, rect.y(),rect.width(), rect.height()); // 平移
}

在这里插入图片描述

window frame 窗口框架

操作系统自带
在这里插入图片描述
Qt 中坐标系
在 Qt 中, 关于位置尺寸,提供了很多的API。
有的API的位置信息是以 Widget 本体左上角为原点(不考虑 Window frame)
有的 API 的位置信息是以 windows frame 左上角为原点的

geometry() 、setGeometry() 都不考虑 window frame
frameGeometry() 、setFrameGeometry() 考虑 window frame
在这里插入图片描述

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 此处直接针对 widget 对象来使用 geometry 和 frameGeometry, 观察区别。QRect rect1 = this->geometry();QRect rect2 = this->frameGeometry();qDebug() << rect1;qDebug() << rect2;
}

在这里插入图片描述
当前代码是放到了构造函数中。
此时这个 Widget 对象正在构造。
还没有被加入到 window frame 中,因此还看不到 window frame 的影响。

void Widget::handle()
{QRect rect1 = this->geometry();QRect rect2 = this->frameGeometry();qDebug() << rect1;qDebug() << rect2;
}

在这里插入图片描述
用槽函数,就可以看出,window frame 的影响

总结:

本文首先介绍了控件的概念,以及为什么在界面开发中需要使用控件。随后详细讲解了QWidget控件的常用属性,包括enable属性、geometry属性和window frame属性,并通过示例代码展示了如何使用这些属性进行界面布局和控件状态的管理。最后,通过元编程的方式介绍了如何利用Qt自动生成的ui文件和相应的ui_widget.h文件来简化界面控件的操作,提高开发效率。希望本文能够帮助读者更好地理解和应用Qt界面开发中的核心概念和技术。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【iOS逆向与安全】网上gw如何自动登录与签到SM2,SM3,SM4算法加解密

1.下载 app 2.frida 调试 3.抓包查看接口 4.分析加密数据 5.易语言编写代码 1 .开始下载 下载好发现有越狱检测&#xff0c;检测点为&#xff1a; -[AppDelegate isJailBreak]; 于是编写插件xm代码 : %hook AppDelegate- (void)isJailBreak{NSLog("AppDelegate is…

【cpp题解】动态规划之爬楼梯 (70)

目录 前言我的思路思路一思路二 我的代码 前言 今天我来学一学动态规划&#xff0c;大二的时候学算法分析与设计&#xff0c;觉得算法是真难&#xff0c;有些高不可攀。现在大四了&#xff0c;其实今天稍微学了一下&#xff0c;简单的动态规划问题就和递归差不多&#xff0c;没…

linux虚拟机配置环境

1.配置虚拟机 在VMware中安装CentOS7&#xff08;超详细的图文教程&#xff09;_在vmware上安装centos-CSDN博客https://blog.csdn.net/qq_45743985/article/details/121152504 2.固定虚拟机ip地址 Vmware虚拟机Linux配置固定IP地址&#xff08;详细版&#xff09;_虚拟机固…

教你快速记录每日待办事项,并提醒自己按时完成不忘记

在忙碌的日常生活中&#xff0c;我们经常会面临待办事项繁杂、时间紧迫的困扰。为了更高效地管理时间和任务&#xff0c;我们需要一个能够快速记录并准时提醒我们完成待办事项的工具。此时&#xff0c;敬业签这类的待办软件就成为了很多人的首选工具。 敬业签是一款功能强大的…

HTML5+CSS3+JS小实例:旋转渐变光标

实例:旋转渐变光标 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale…

一般实现分布式锁都有哪些方式?使用 Redis 如何设计分布式锁?使用 zk 来设计分布式锁可以吗?这两种分布式锁的实现方式哪种效率比较高?

目录 1.Redis 分布式锁 &#xff08;1&#xff09;Redis 最普通的分布式锁 &#xff08;2&#xff09;RedLock 算法 2.zk 分布式锁 3.redis 分布式锁和zk分布式锁的对比 1.Redis 分布式锁 官方叫做 RedLock 算法&#xff0c;是 Redis 官方支持的分布式锁算法。 这个分布式…

24年最新AI数字人简单混剪

24年最新AI数字人简单混剪 网盘自动获取 链接&#xff1a;https://pan.baidu.com/s/1lpzKPim76qettahxvxtjaQ?pwd0b8x 提取码&#xff1a;0b8x

Web 性能终极指南(点击即可跳转对应的内容界面,制作不易。给个关注谢谢。)

Web 性能&#x1f680;终极指南 #[HTML全文] #CSS的 #JavaScript的 #反应 点击即可跳转对应的内容界面&#xff0c;制作不易。给个关注谢谢。 有很多方法可以加快您的网站速度。难道你不希望每个网络性能提示都集中在一个地方吗&#xff1f;我也是这么想的&#xff0c;所以我把…

揭秘数据可视化:五款利器助力决策

在当今这个数据驱动的时代&#xff0c;数据可视化已成为企业决策、数据分析不可或缺的一部分。通过直观、生动的图形、图像&#xff0c;数据可视化能够更快速、更准确地传达信息&#xff0c;帮助企业洞察数据背后的价值。本文将为您介绍几款优秀的数据可视化工具。 一、山海鲸…

python 使用 MQTT

目录结构 1、py代码 offRelay12-yixing.py # _*_ coding: utf-8 _*_ # 须用到第三方库&#xff1a;paho-mqtt # 安装命令 python3 -m pip install paho-mqttimport time import json import paho.mqtt.client as mqtt# 函数&#xff1a;关闭所有房间的12路继电器模块上指定的…

原型模式类图与代码

现要求实现一个能够自动生成求职简历的程序&#xff0c;简历的基本内容包括求职者的姓名、性别、年龄及工作经历。希望每份简历中的工作经历有所不同&#xff0c;并尽量减少程序中的重复代码。 采用原型模式(Prototype)来实现上述要求&#xff0c;得到如图 7.25 所示的类图。 原…

王春城:精益变革对于组织的长期发展有什么好处?

众所周知&#xff0c;精益变革不仅仅是一种管理方法的改进&#xff0c;更是一种思维方式的转变&#xff0c;旨在消除浪费、提高效率和持续改进。那么&#xff0c;精益变革对于组织的长期发展究竟有什么好处呢&#xff1f;下面天行健王春城老师将从多个方面详细阐述。 首先&…

【承装修、试电力施工许可证申报指南】广西承装(修、试)电力设施许可证资质代办流程

【承装修、试电力施工许可证申报指南】广西承装(修、试)电力设施许可证资质代办流程 广西承装(修、试)电力设施许可证资质代办流程 在广西地区&#xff0c;承装、修、试电力设施许可证的资质代办流程相对复杂&#xff0c;但遵循一定的步骤和规定&#xff0c;可以确保流程的顺利…

Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案

文章目录 一、vue中使用el-table的typeindex有时不显示序号Table 表格显示索引自定义索引报错信息解决方案 二、vue中Missing required prop: “value” 报错报错原因解决方案 三、el-table的索引值index在翻页的时候可以连续显示方法一方法二 四、vue3中Element Plus全局组件配…

男士内裤品牌哪个好?口碑最好的男士内裤汇总

许多男士选内裤可能比较随意&#xff0c;但实际上作为长时间贴合身体皮肤的贴身衣物&#xff0c;经常会出很多汗。而普通的内裤会吸附很多汗水却不易干&#xff0c;导致细菌含量超标&#xff0c;摩擦力增强&#xff0c;容易造成破皮感染从而影响健康。 但是现在的男士内裤种类和…

充电宝哪个牌子好?比较好用充电宝牌子,这些品牌别错过

作为一个资深的手机控&#xff0c;深知手机对于现代人的重要性。从早到晚&#xff0c;无论是点外卖、看剧还是处理各种事务&#xff0c;手机几乎成了我生活的必需品。然而&#xff0c;手机电量的问题总是让人头疼。在家时&#xff0c;找个插座充电自然不成问题&#xff0c;但出…

vue2后台管理项目

一:项目准备 1)拉取模板代码 远程仓库复制到本地仓库. 2)安装后的项目 路径 code 文件夹 会打开vscode的文件夹. 3)安装vetur和eslint插件可以保存时自动修改不规范的地方. 4)App内有一级路由,路由组件导入如果是layout架子,会导入的是文件夹下的index.js没有则导入index.v…

Baidu Comate:你的智能编码助手,编程效率倍增的秘密武器

Baidu Comate智能编码助手 Baidu Comate 智能编码助手简单介绍安装使用查看Comate插件功能智能代码提示使用飞浆和百度智能小程序进行智能问答使用AutoWork插件实现二次函数图像的生成引用Comate知识库存在的问题结束语 Baidu Comate 智能编码助手简单介绍 Baidu Comate&#x…

rmallox勒索病毒肆虐,如何保护网络安全?

rmallox勒索病毒与网络安全的关系可以从以下几个方面来阐述&#xff1a; 一、rmallox勒索病毒的特性 rmallox勒索病毒是一种极具破坏性的计算机病毒&#xff0c;它具有多个显著特性&#xff0c;这些特性使得该病毒对网络安全构成了严重威胁。具体来说&#xff0c;rmallox病毒具…

leetcode-缺失的第一个正整数-96

题目要求 思路 1.这里的题目要求刚好符合map和unordered_map 2.创建一个对应map把元素添加进去&#xff0c;用map.find(res)进行查找&#xff0c;如果存在返回指向该元素的迭代器&#xff0c;否则返回map::end()。 代码实现 class Solution { public:int minNumberDisappeare…