Qt学习:Qt的坐标系统

一、Qt的坐标系

Qt的坐标系统是一个基于屏幕或窗口的二维空间体系,用于描述用户界面元素的位置和大小。在Qt中,主要有两种坐标系:

  1. 屏幕坐标系统(Screen Coordinates):这是最直观的坐标系统,原点通常设置为屏幕左上角,X轴向右延伸,Y轴向下延伸。当你创建窗口并放置控件时,如果不指定其他坐标,它们会按照屏幕坐标进行定位。

  2. 窗口坐标系统(Window Coordinates):每个窗口都有自己的坐标系统,相对于其父窗口(如果没有父窗口,则相对于屏幕)。当控件在窗口内部移动时,窗口坐标保持不变,即使窗口被调整大小或移动到其他位置。

此外,Qt还提供了一种称为网格布局系统(Grid Layout)的布局管理器,它使用行、列的概念,允许开发者用整数索引定义控件的相对位置,使得布局更易于管理和调整。

二、Qt图像坐标定位的类型

在Qt中,图形坐标的定位主要有两种类型:

  1. 像素坐标(Pixel Coordinates):这是最基本的坐标系统,通常用于用户界面元素的设计和布局。像素坐标基于屏幕分辨率,每个点都是屏幕上的物理位置,单位通常是像素(px)。在像素坐标下,元素的位置是固定的,不受缩放或窗口大小变化的影响。

  2. 设备坐标(Device Coordinates):这种坐标系更底层,与硬件直接相关。它根据设备的独立坐标系统(如屏幕对角线长度),提供了相对于屏幕中心或视口的坐标,适合做一些精确的绘图操作。例如,在调整窗口大小时,内容可能会按比例缩放,但设备坐标保持不变。

  3. 窗口坐标(Window Coordinates):在Qt中的QGraphicsView等容器中,窗口坐标是相对于父窗口的,当子窗口移动或缩放时,其内部元素的窗口坐标会相应改变。

  4. 逻辑坐标(Logical Coordinates):这是一种抽象的坐标系统,常用于处理用户输入事件,比如鼠标点击。这些坐标通常被映射到窗口坐标上,便于处理用户的交互动作。

为了灵活地处理不同类型的坐标转换,Qt提供了坐标变换机制,如QTransform类,以及相关的坐标转换函数,如mapFrom*To*系列方法,帮助开发者在不同坐标之间切换和计算。

三、Qt中部件的布局、位置与大小

在Qt中,窗口和部件(Widgets)的定位主要涉及如何在窗体上放置、调整大小以及管理它们的位置。Qt提供了一套丰富的布局管理和几何管理工具来控制组件的布局。

  • 绝对定位:你可以直接使用setGeometry()方法为窗口或部件设置特定的X、Y坐标和宽度、高度。例如:
    QWidget *widget = new QWidget();
    widget->setGeometry(10, 10, 200, 200); // 在屏幕左上角10, 10位置,宽200高200像素
  • 网格布局QGridLayout, QVBoxLayout, 和 QHBoxLayout 这些布局管理器将部件按照网格或线性的方式排列,通过设置行/列索引来指定组件的位置。

  • 自适应布局:如QSizePolicy用于设置组件的大小策略,使其根据容器的变化自动调整大小或保持原始尺寸。

  • 约束布局QFormLayoutQBoxLayout等可以创建对齐元素或使元素围绕中心点分布。

  • 窗口管理器:窗口可以通过show()调用显示,并使用move()方法改变其位置,而resize()用于更改大小。窗口通常有自己的默认标题栏,可通过setWindowPosition(), setWindowTitle()等方法进行定制。

  四、geometry()frameGeometry() 的区别

在Qt中,QRect 类型的 geometry()frameGeometry() 是两个方法,它们用于获取不同位置和大小信息,主要区别在于:

  1. geometry(): 这个方法返回的是控件的实际几何尺寸,包括控件本身的所有边距(padding)、内边距(margin)以及可能存在的边框(border)。也就是说,它是计算控件内容区域加上所有可见的边界的矩形。

  2. frameGeometry(): 此方法则返回控件的框架(frame)边界,不包括内部的内容、边距或填充等,只考虑控件的基本形状(通常不含边框),仅包含了控件本身的可视部分。

总结来说,如果你需要了解控件完整的占用空间,包括所有的内边距和边框,就使用 geometry()。而如果你只想看控件的“实际”窗口区域(没有边距和边框的部分),则应该用 frameGeometry()。这两个方法在布局管理器调整控件位置或大小时可能会有所差异。

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

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

相关文章

操作符“->“

title: 操作符"->" date: 2024-01-16 00:00:00 categories: C箭头 tags: 箭头操作以及偏移量计算 #嘎嘎 操作符"->" ->是一个成员访问的操作,它的作用是通过一个指针来访问它所指向的对象的成员变量或成员函数。它的左边必须是一个指…

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE 解决方法:在命令后面加上 -legacy-peer-deps结果: 解决参考:https://blog.csdn.net/qq_43799531/article/details/131403987

全网最适合入门的面向对象编程教程:09 类和对象的Python实现-类之间的关系,你知道多少?

全网最适合入门的面向对象编程教程:09 类和对象的 Python 实现-类之间的关系,你知道多少? 摘要: 本文主要对类之间的关系进行了基本介绍,包括继承、组合、依赖关系,并辅以现实中的例子加以讲解&#xff0…

Java的进程和线程

一Java的进程 二Java的线程 多线程 ◆如果在一个进程中同时运行了多个线程,用来完成不同的工作,则称之为“多线程”。 ◆多个线程交替占用CPU资源,而非真正的并行执行。 ◆多线程好处。 ◆充分利用CPU的资源。 ◆简化编程模型。 ◆良好的用…

js 递归调用 相同对象--数组递归调用

<div class="save-cl"> <a-button @click="saveCl" >保存为常用策略</a-button> </div> saveCl(){ console.log(this.form.filterList[0],--------常用策略)// 此对象为上图对象 console.log(this.allElementsHaveValue(thi…

AGI系列(7)Reflection 在 AI agent 中的应用实例

斯坦福大学教授吴恩达一直非常推崇AI Agent,之前他提出过AI Agent的四种工作模式,分别是Reflection(反思)、Tool use(工具使用)、Planning(规划)和Multi-agent collaboration(多智能体协同)。 近日,他又开源了一个翻译 AI Agent, 他认为 AI 智能体机器翻译对改进传…

阿里巴巴Arthas分析调优JVM实战及常量池详解

目录 一、阿里巴巴Arthas详解 Arthas使用场景 Arthas命令 Arthas使用 二、GC日志详解 如何分析GC日志 CMS G1 GC日志分析工具 三、JVM参数汇总查看命令 四、Class常量池与运行时常量池 字面量 符号引用 五、字符串常量池 字符串常量池的设计思想 三种字符串操作…

掌握电路交换与分组交换:计算机网络的核心技术

计算机网络是现代信息社会的基石&#xff0c;而交换技术是实现网络通信的核心。本文将详细介绍两种典型的交换方式&#xff1a;电路交换和分组交换&#xff0c;帮助基础小白快速掌握这两种技术的基本概念和区别。 什么是电路交换&#xff1f; 电路交换&#xff08;Circuit Swi…

技术革新引领钢材质量智能化检测新纪元,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建钢材工业生产场景下钢材缺陷智能检测识别系统

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;其应用领域不断拓宽&#xff0c;正深刻改变着传统产业的运作模式。在钢材生产这一基础工业领域&#xff0c;AI的引入正为钢材的质量检测带来革命性的变革。 在传统的钢材生产流程中&#xff0c;质量检测是确…

【C++】二叉搜索树的模拟实现

前言&#xff1a;今天我们学习相对来说比前面轻松一点的内容&#xff0c;二叉搜索树&#xff0c;在之前我们学习过二叉树今天的内容对于我们就会比较简单一点了&#xff0c;一起加油。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质…

从零开始学量化~Ptrade使用教程——安装与登录

PTrade交易系统是一款高净值和机构投资者专业投资软件&#xff0c;为用户提供普通交易、篮子交易、日内回转交易、算法交易、量化投研/回测/实盘等各种交易工具&#xff0c;满足用户的各种交易需求和交易场景&#xff0c;帮助用户提高交易效率。 运行环境及安装 操作系统&…

计算机的错误计算(二十一)

摘要 两个不相等数相减&#xff0c;差为0&#xff1a; ? 在计算机的错误计算&#xff08;十九&#xff09;中&#xff0c;高中生小明发现本应为0的算式结果不为0. 今天他又发现对本不为0的算式&#xff0c;计算机的输出为0. 在 Python 中计算 &#xff1a; 则输出为0. 若用 C…

必备的 Adobe XD 辅助工具

想要高效便捷的使用 Adobe XD&#xff0c; Adobe XD 插件是必不可少的&#xff0c; Adobe XD 的插件非常多&#xff0c;但 90%都是英文&#xff0c;并且良莠不齐。在这儿挑选 9 个好用的 Adobe XD 插件给大家&#xff0c;这里是我整理的一些实用 Adobe XD 插件&#xff0c;让你…

3-2 梯度与反向传播

3-2 梯度与反向传播 主目录点这里 梯度的含义 可以看到红色区域的变化率较大&#xff0c;梯度较大&#xff1b;绿色区域的变化率较小&#xff0c;梯度较小。 在二维情况下&#xff0c;梯度向量的方向指向函数增长最快的方向&#xff0c;而其大小表示增长的速率。 梯度的计算 …

UE5 07-给物体添加一个拖尾粒子

添加一个(旧版粒子系统)cascade粒子系统组件 ,在模板中选择一个开发学习初始包里的粒子

Elasticsearch:Ingest architectures - 摄取架构

我们提供各种采集架构&#xff0c;以满足各种用例和网络配置的需求。 要将数据采集到 Elasticsearch&#xff0c;请使用最符合你的需求和用例的选项。对于许多用户和用例来说&#xff0c;最简单的方法是使用 Elastic Agent 采集数据并将其发送到 Elasticsearch。Elastic Agent…

Mybatis框架的集成使用

1_框架概述 框架是一个半成品&#xff0c;已经对基础的代码进行了封装并提供相应的API&#xff0c;开发者在使用框架时直接调用封装好的api可以省去很多代码编写&#xff0c;从而提高工作效率和开发速度,框架是一种经过校验、具有一定功能的半成品软件. 经过校验&#xff1a;指…

零基础学习MySQL---库的相关操作

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、创建数据库 1.语法 CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification] .…

使用selenium定位input标签下的下拉框

先来看一下页面效果&#xff1a;是一个可输入的下拉列表 再来看一下下拉框的实现方式&#xff1a; 是用<ul>和<li>方式来实现的下拉框&#xff0c;不是select类型的&#xff0c;所以不能用传统的select定位方法。 在着手定位元素前一定一定要先弄清楚下拉列表…

CocoaPodsCmake

https://juejin.cn/post/7257048145233838141?searchId20240531171431E5868B41DC7B7016CCBA https://guides.cocoapods.org CocoaPods CocoaPods的作用 帮助程序员通过命令管理第三方库及更新&#xff0c;以达到扩展项目的目的。 CocoaPods的使用 在已有的工程目录下新增…