QT常用位置函数区别

目录

  • 1、引言
  • 2、实验代码
  • 3、位置函数
    • 3.1 x()
    • 3.2 y()
    • 3.3 frame()
    • 3.4 pos()
    • 3.5 geometry()
    • 3.6 width()
    • 3.7 height()
    • 3.8 rect()
    • 3.9 size()

1、引言

QT有众多图形绘制函数,包括x()、y()、frame()、pos()、geometry()、width()、height()、rect()、size(),它们对屏幕坐标的捕获是有区别的。

2、实验代码

代码出自Qt5开发及实例(第3版)

geometry.h

#pragma once

#include <QtWidgets/QDialog>
#include <QLabel>
#include <QGridLayout>

class geometry : public QDialog
{
    Q_OBJECT
public:
    geometry(QWidget *parent = nullptr);
    ~geometry();
    void updateLabel();
private:
    QLabel* xLabel;
    QLabel* xValueLabel;
    QLabel* yLabel;
	QLabel* yValueLabel;
	QLabel* FrmLabel;
	QLabel* FrmValueLabel;
	QLabel* posLabel;
	QLabel* posValueLabel;
	QLabel* geoLabel;
	QLabel* geoValueLabel;
	QLabel* widthLabel;
	QLabel* widthValueLabel;
	QLabel* heightLabel;
	QLabel* heightValueLabel;
	QLabel* rectLabel;
	QLabel* rectValueLabel;
	QLabel* sizeLabel;
	QLabel* sizeValueLabel;
	QGridLayout* mainLayout;
protected:
	void moveEvent(QMoveEvent*);
	void resizeEvent(QResizeEvent *);
};

geometry.cpp

#include "geometry.h"

geometry::geometry(QWidget *parent)
    : QDialog(parent)
{
	setWindowTitle(tr("CH601"));
    xLabel = new QLabel(tr("x():"));
    xValueLabel = new QLabel;
	yLabel = new QLabel(tr("y():"));
	yValueLabel = new QLabel;
	FrmLabel = new QLabel(tr("Frame():"));
	FrmValueLabel = new QLabel;
	posLabel = new QLabel(tr("pos():"));
	posValueLabel = new QLabel;
	geoLabel = new QLabel(tr("geometry():"));
	geoValueLabel = new QLabel;
	widthLabel = new QLabel(tr("width():"));
	widthValueLabel = new QLabel;
	heightLabel = new QLabel(tr("height():"));
	heightValueLabel = new QLabel;
	rectLabel = new QLabel(tr("rect():"));
	rectValueLabel = new QLabel;
	sizeLabel = new QLabel(tr("size():"));
	sizeValueLabel = new QLabel;
	mainLayout = new QGridLayout(this);
	mainLayout->addWidget(xLabel,0,0);
	mainLayout->addWidget(xValueLabel, 0, 1);
	mainLayout->addWidget(yLabel, 1, 0);
	mainLayout->addWidget(yValueLabel, 1, 1);
	mainLayout->addWidget(FrmLabel, 2, 0);
	mainLayout->addWidget(FrmValueLabel, 2, 1);
	mainLayout->addWidget(posLabel, 3, 0);
	mainLayout->addWidget(posValueLabel, 3, 1);
	mainLayout->addWidget(geoLabel, 4, 0);
	mainLayout->addWidget(geoValueLabel, 4, 1);
	mainLayout->addWidget(widthLabel, 5, 0);
	mainLayout->addWidget(widthValueLabel, 5, 1);
	mainLayout->addWidget(heightLabel, 6, 0);
	mainLayout->addWidget(heightValueLabel, 6, 1);
	mainLayout->addWidget(rectLabel, 7, 0);
	mainLayout->addWidget(rectValueLabel, 7, 1);
	mainLayout->addWidget(sizeLabel, 8, 0);
	mainLayout->addWidget(sizeValueLabel, 8, 1);
	//updateLabel();
}
geometry::~geometry()
{}

void geometry::updateLabel()
{
	QString xStr;
	xValueLabel->setText(xStr.setNum(x()));

	QString yStr;
	yValueLabel->setText(xStr.setNum(y()));

	QString frameStr;
	QString tempStr1, tempStr2, tempStr3, tempStr4;
	frameStr = tempStr1.setNum(frameGeometry().x()) + "," + tempStr2.setNum(frameGeometry().y())
		+ "," + tempStr3.setNum(frameGeometry().width()) + "," + tempStr4.setNum(frameGeometry().height());
	FrmValueLabel->setText(frameStr);

	QString positionStr;
	QString tempStr11, tempStr12;
	positionStr = tempStr11.setNum(pos().x()) + "," + tempStr12.setNum(pos().y());
	posValueLabel->setText(positionStr);

	QString geoStr;
	QString tempStr21, tempStr22, tempStr23, tempStr24;
	geoStr = tempStr21.setNum(geometry().x()) + "," + tempStr22.setNum(geometry().y())
		+ "," + tempStr23.setNum(geometry().width()) + "," + tempStr24.setNum(geometry().height());
	geoValueLabel->setText(geoStr);

	QString wStr, hStr;
	widthValueLabel->setText(wStr.setNum(width()));
	heightValueLabel->setText(wStr.setNum(height()));

	QString rectStr;
	QString tempSr31, tempStr32, tempStr33, tempStr34;
	rectStr = tempSr31.setNum(rect().x()) + "," + tempStr32.setNum(rect().y())+ ","
		+ tempStr33.setNum(/*rect().width()*/width()) + "," + tempStr34.setNum(/*rect().height()*/height());

	rectValueLabel->setText(rectStr);

	QString sizeStr;
	QString tempStr41, tempStr42;
	sizeStr = tempStr41.setNum(size().width()) + "," + tempStr42.setNum(size().height());
	sizeValueLabel->setText(sizeStr);
}

void geometry::moveEvent(QMoveEvent*)
{
	updateLabel();
}

void geometry::resizeEvent(QResizeEvent*)
{
	updateLabel();
}

实验结果:
结果1:
在这里插入图片描述

更改大小后得到结果2:
在这里插入图片描述

3、位置函数

3.1 x()

显示当前widget左上角坐标相对于主界面的x轴位置,x轴是向右计算。

3.2 y()

显示当前widget左上角坐标相对于主界面的y轴位置,y轴向下计算。

3.3 frame()

frame().x()和frame().y()和x()、y()相同,都表示左上角的坐标点,frame().width()表示当前整个程序框的宽度,frame().height()表示整个程序框的高度。

3.4 pos()

pos().x()和pos().y()都是相对于主界面来说的坐标点,与x()、y()相同。

3.5 geometry()

geometry().x()和geometry().y()返回当前主界面的坐标位置,同时geometry().width()和geometry().height()会返回主界面的大小,这里的Dialog属于是子窗口。

3.6 width()

width()返回当前窗口的宽度。

3.7 height()

height()返回当前窗口的高度。

3.8 rect()

rect().width()和rect().height()返回当前窗口的宽和高。

3.9 size()

size().width()和size().height()返回当前窗口的宽和高。

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

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

相关文章

【Java学习笔记】多线程与线程池

多线程与线程池一、多线程安全与应用1、程序、进程与线程的关系2、创建多线程的三种方式&#xff08;1&#xff09;继承Thread类创建线程【不推荐】&#xff08;2&#xff09;实现Runnable接口创建线程&#xff08;3&#xff09;Callable接口创建线程3、线程的生命周期4、初识线…

基础入门 HTTP数据包Postman构造请求方法请求头修改状态码判断

文章目录数据-方法&头部&状态码请求requestResponse状态码案例-文件探针&登录爆破工具-Postman自构造使用数据-方法&头部&状态码 请求request 1、常规请求-Get 2、用户登录-Post •get&#xff1a;向特定资源发出请求&#xff08;请求指定页面信息&#x…

为什么这么NB?huatuo革命Unity热更新

最近huatuo(华佗)热更新解决方案火爆了unity开发圈,起初我觉得热更新嘛&#xff0c;不就是内置一个脚本解释器脚本语言开发&#xff0c;如xLua, ILRuntime, puerts。Huatuo又能玩出什么花样&#xff0c;凭什么会这么NB&#xff0c;引起了那么多程序员的关注与称赞呢&#xff1f…

单片机——IIC协议与24C02

1、基础知识 1.1、IIC串行总线的组成及工作原理 I2C总线只有两根双向信号线。一根是数据线SDA&#xff0c;另一根是时钟线SCL。 1.2、I2C总线的数据传输 I2C总线进行数据传送时&#xff0c;时钟信号为高电平期间&#xff0c;数据线上的数据必须保持稳定&#xff0c;只有在时钟…

Linux实操之进程管理

文章目录一、基本介绍二、显示系统执行的进程基本介绍三、ps详解四、终止进程kill和killall介绍:●基本语法常用选项五、查看进程树pstree基本语法常用选项一、基本介绍 1&#xff0e;在LINUX中&#xff0c;每个执行的程序都称为一个进程。每一个进程都分配一个ID号(pid,进程号…

【SCL】实现简单算法--冒泡排序

使用SCL语言实现一个冒泡排序的简单算法 文章目录 目录 文章目录 前言 二、实现排序 1.读取存储器地址&#xff08;PEEK&#xff09;指令 2.编写程序 总结 前言 本文我们来一起使用SCL来实现一个简单的算法——冒泡排序&#xff1b;它可以对少量数据进行从小到大或从大到小排序…

【Linux】GDB的安装与使用

安装安装gdb的具体步骤如下&#xff1a;1、查看当前gdb安装情况rpm -qa | grep gdb如果有&#xff0c;则可以先删除&#xff1a;rpm -e --nodeps 文件名如果没有&#xff0c;则进行下一步。2、下载gdb源码包或者直接apt安装。apt命令安装&#xff1a;sudo apt install gdb源码包…

Qt之QPainter绘制多个矩形/圆形(含源码+注释)

一、绘制示例图 下图绘制的是矩形对象&#xff0c;但是将绘制矩形函数&#xff08;drawRect&#xff09;更改为绘制圆形&#xff08;drawEllipse&#xff09;即可绘制圆形。 二、思路解释 绘制矩形需要自然要获取矩形数据&#xff0c;因此通过鼠标事件获取每个矩形的rect数…

一个完整的渗透学习路线是怎样的?如何成为安全渗透工程师?

前言 1/我是如何学习黑客和渗透&#xff1f; 我是如何学习黑客和渗透测试的&#xff0c;在这里&#xff0c;我就把我的学习路线写一下&#xff0c;让新手和小白们不再迷茫&#xff0c;少走弯路&#xff0c;拒绝时间上的浪费&#xff01; 2/学习常见渗透工具的使用 注意&…

SpringBoot集成 SpringSecurity安全框架

文章目录一、CSRF跨站请求伪造攻击二、项目准备三、认识 SpringSecurity3.1 认证&#x1f380;①直接认证&#x1f380;②使用数据库认证3.2 授权&#x1f361;①基于角色授权&#x1f361;②基于权限的授权&#x1f361;③使用注解判断权限3.3 "记住我"3.4 登录和注…

【JavaEE】如何将JavaWeb项目部署到Linux云服务器?

写在前面 大家好&#xff0c;我是黄小黄。不久前&#xff0c;我们基于 servlet 和 jdbc 完善了博客系统。本文将以该系统为例&#xff0c;演示如何将博客系统部署到 Linux 云服务器。 博客系统传送门&#xff1a; 【JavaEE】前后端分离实现博客系统&#xff08;页面构建&#…

arcpy基础篇(3)-处理空间数据

ArcPy的数据访问模块arcpy.da&#xff0c;可以控制会话、编辑操作、游标、表或要素类与NumPy数组之间相互转换的函数以及对版本化和复本工作流的支持。 1.使用游标访问数据 游标是一个数据库术语&#xff0c;它主要用于访问表格中的每一行记录或者向表中插入新的记录。在ArcG…

【数据结构】Java实现单链表

目录 1. ArrayList的缺陷 2. 链表 2.1 链表的概念及结构 2.2 接口的实现 3. 动手实现单链表 3.1 重写SeqList接口方法 3.2 在当前链表头部添加节点&#xff08;头插&#xff09; 3.3 在 第index位置添加节点&#xff08;任意位置&#xff09; 3.4 在当前链表尾部添加…

Python|蓝桥杯进阶第四卷——图论

欢迎交流学习~~ 专栏&#xff1a; 蓝桥杯Python组刷题日寄 蓝桥杯进阶系列&#xff1a; &#x1f3c6; Python | 蓝桥杯进阶第一卷——字符串 &#x1f50e; Python | 蓝桥杯进阶第二卷——贪心 &#x1f49d; Python | 蓝桥杯进阶第三卷——动态规划 ✈️ Python | 蓝桥杯进阶…

四、快速上手 ODM 操作 Mongodb

文章目录一、ODM 的选择和安装二、MongoEngine 模型介绍三、文档的嵌套模型四、使用 ODM 查询数据4.1 查询一个文档4.2 条件查询4.3 统计、排序和分页五、使用 ODM 新增数据六、使用 ODM 修改和删除数据一、ODM 的选择和安装 MongoEngine&#xff1a; 使用最为广泛的 ODM。htt…

【C++】命名空间

&#x1f3d6;️作者&#xff1a;malloc不出对象 ⛺专栏&#xff1a;C的学习之路 &#x1f466;个人简介&#xff1a;一名双非本科院校大二在读的科班编程菜鸟&#xff0c;努力编程只为赶上各位大佬的步伐&#x1f648;&#x1f648; 目录前言一、命名空间产生的背景二、命名空…

基础篇:07-Nacos注册中心

1.Nacos安装部署 1.1 下载安装 nacos官网提供了安装部署教程&#xff0c;其下载链接指向github官网&#xff0c;选择合适版本即可。如访问受阻可直接使用以下最新稳定版压缩包&#xff1a;&#x1f4ce;nacos-server-2.1.0.zip&#xff0c;后续我们也可能会更改为其他版本做更…

图论学习(五)

极图 l部图的概念与特征 定义&#xff1a;若简单图G的点集V有一个划分&#xff1a; 且所有的Vi非空&#xff0c;Vi内的点均不邻接&#xff0c;设G是一个l部图。 如果l2&#xff0c;则G就是偶图。n阶无环图必是n部图。若l1<l2≤n&#xff0c;则任意的l1部图也是l2部图。…

【毕业设计】基于SpringBoot+Vue论坛管理系统【源码(完整源码请私聊)+论文+演示视频+包运行成功】

您好&#xff0c;我是码农飞哥&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通 &#x1f601; 2. 毕业设计专栏&…

JavaScript学习笔记(7.0)

<!--* Author: RealRoad1083425287qq.com* Date: 2023-03-13 14:50:18* LastEditors: Mei* LastEditTime: 2023-03-13 15:08:54* FilePath: \vscode\鼠标跟随.html* Description: * * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. --> <!DOCTYPE …
最新文章