【Qt知识】Qt窗口坐标系

Qt的窗口坐标体系遵循标准的计算机图形坐标系统规则

Qt窗口坐标体系特点

  1. 坐标原点:窗口坐标体系的原点位于窗口的左上角,即坐标(0, 0)位置。

  2. 轴方向

    • X轴:向右为正方向,随着X坐标值的增加,元素在窗口中从左向右移动。
    • Y轴:向下为正方向,随着Y坐标值的增加,元素在窗口中从上向下移动。
  3. 嵌套窗口:对于嵌套的窗口或控件,其坐标是相对于其直接父窗口的左上角计算的。这意味着子窗口或控件的位置描述是局部坐标,需要结合父窗口的位置才能映射到全局坐标体系中。

  4. 事件坐标 :在处理鼠标或其他输入事件时,Qt提供的事件对象(如QMouseEvent)通常包含的坐标是相对于接收事件的窗口或控件的。若要获取相对于屏幕的绝对坐标,可以使用如QMouseEvent::globalPos()这样的方法。

  5. 坐标转换 :在绘图或处理复杂布局时,可能需要在逻辑坐标系、窗口坐标系和设备坐标系之间转换。QPainter提供了如setWindowsetViewPort等方法来帮助进行坐标变换,使得绘图可以在不同的坐标体系中进行。

  6. 布局管理 :虽然不是直接的坐标体系特性,但Qt的布局管理系统(如QLayout)可以自动管理控件的位置和大小,以适应窗口大小的变化,这间接影响了控件在窗口坐标系中的布局。

注意:在Qt中,一个控件的坐标通常是相对于其父控件的。这意味着当指定一个控件的位置时(比如通过move(int x, int y)方法),给出的坐标(x, y)是指相对于该控件父控件左上角的水平和垂直偏移量。这种设计允许用户界面元素在嵌套布局中灵活定位,同时简化了坐标系统的管理,因为每个控件只需关心相对于直接容器的位置即可。

当我们用代码直接创建一个pushbutton,会发现其在右上角。

cpp 复制代码
//widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    QPushButton* button = new QPushButton(this);
    button->setText("button");
}

Widget::~Widget()
{
    delete ui;
}

当我们添加这样一行代码后

cpp 复制代码
    button->move(114,514);//单位:像素

运行后会发现,按钮坐标发生偏移。

相关推荐
diemeng11194 分钟前
2024系统编程语言风云变幻:Rust持续领跑,Zig与Ada异军突起
开发语言·前端·后端·rust
软件黑马王子17 分钟前
Unity游戏制作中的C#基础(3)加减乘除算术操作符,比较运算符,逻辑与,或运算符
开发语言·unity·c#
张太行_18 分钟前
Qt Creator 设计界面后的预览方法
开发语言·qt
视觉CG23 分钟前
【Viewer.js】vue3封装图片查看器
开发语言·javascript·vue.js
h^hh29 分钟前
洛谷 P3405 [USACO16DEC] Cities and States S(详解)c++
开发语言·数据结构·c++·算法·哈希算法
qwy71522925816335 分钟前
20-R 绘图 - 饼图
开发语言·数据库·r语言
重生之我要成为代码大佬36 分钟前
Python天梯赛10分题-念数字、求整数段和、比较大小、计算阶乘和
开发语言·数据结构·python·算法
琑951 小时前
nextjs项目搭建——头部导航
开发语言·前端·javascript
酷爱码1 小时前
2025 PHP授权系统网站源码
开发语言·php
张胤尘1 小时前
Lua | 每日一练 (3)
开发语言·面试·lua