『 QT 』QT窗口坐标体系详解

文章目录


QT窗口坐标体系

QT窗口坐标体系本质上是用来控制控件在父框架(控件)上的具体位置;

通常情况下, 在数学中所采用的坐标系为"笛卡尔坐标系", 其中该坐标系的原点为中心, x轴向右侧延伸, y轴向上延伸, 同时分为四个象限;

平面直角坐标系(笛卡尔坐标系)


而在GUI开发中, 常用的坐标系为屏幕坐标系;

屏幕坐标系的原点于左上角, x由原点向右延伸, y轴由原点向下进行延伸;

屏幕坐标系


通常情况下, 对于QT控件而言, 其坐标系是基于父控件(框架)而言的;

如该图所示, QWidget框架的位置是基于Screen, 而QPushButton的位置是基于QWidget;

当然这里的Screen表示的是整个显示器, 当一个控件(框架)没有父节点时, 其坐标位置将基于Screen屏幕的左上角作为原点;


坐标测试

假设一个QWidget中存在一个QPushButton控件, 对这个QPushButton设置文本为Click Me, 并且对按钮设置信号和槽;

其中该槽与QPushButton::clicked()信号绑定;

当用户点击按钮后发送该信号, 槽将会做到:

  1. 调整QWidget基于Screen的位置
  2. 调整QPushButton控件基于QWidget的位置
  3. 设置WindowTitle"The Button clicked"

代码为如下:

cpp 复制代码
//////////////////////////////////////////
///////////////* widget.h *///////////////
//////////////////////////////////////////
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void change_position(); // 声明槽

private:
    Ui::Widget *ui;
    QPushButton* mybutton; // 将控件声明为成员函数
};

////////////////////////////////////////////
///////////////* widget.cpp *///////////////
////////////////////////////////////////////
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , mybutton(new QPushButton(this)) // 初始化列表初始化 mybutton 控件
{
    ui->setupUi(this);
    mybutton->setText("Click Me");
    mybutton->move(20, 20);
    connect(mybutton, &QPushButton::clicked, this, &Widget::change_position); // 连接 信号 - 槽

}

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

void Widget::change_position()
{
    mybutton->move(300, 300/*像素*/); // 改变mybutton基于Widget的位置
    this->move(40,40); // 改变Widget基于Screen的位置
    this->setWindowTitle("The button clicked"); // 改变Widget的WindowTitle
}

演示效果如下:

相关推荐
Boilermaker19921 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
MM_MS1 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测
꧁Q༒ོγ꧂2 小时前
LaTeX 语法入门指南
开发语言·latex
njsgcs2 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹
开发语言·python·unreal engine·ue
alonewolf_992 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
古城小栈2 小时前
Rust 迭代器产出的引用层数——分水岭
开发语言·rust
ghie90902 小时前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体12 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk9982 小时前
VSC优化算法MATLAB实现
开发语言·算法·matlab
AI小怪兽3 小时前
基于YOLOv13的汽车零件分割系统(Python源码+数据集+Pyside6界面)
开发语言·python·yolo·无人机