『 QT 』QT窗口坐标体系详解
文章目录
- QT窗口坐标体系
- 坐标测试
QT窗口坐标体系
QT窗口坐标体系本质上是用来控制控件在父框架(控件)上的具体位置;
通常情况下, 在数学中所采用的坐标系为"笛卡尔坐标系", 其中该坐标系的原点为中心, x
轴向右侧延伸, y
轴向上延伸, 同时分为四个象限;
而在GUI
开发中, 常用的坐标系为屏幕坐标系;
屏幕坐标系的原点于左上角, x
由原点向右延伸, y
轴由原点向下进行延伸;
通常情况下, 对于QT
控件而言, 其坐标系是基于父控件(框架)而言的;
如该图所示, QWidget
框架的位置是基于Screen
, 而QPushButton
的位置是基于QWidget
;
当然这里的Screen
表示的是整个显示器, 当一个控件(框架)没有父节点时, 其坐标位置将基于Screen
屏幕的左上角作为原点;
坐标测试
假设一个QWidget
中存在一个QPushButton
控件, 对这个QPushButton
设置文本为Click Me
, 并且对按钮设置信号和槽;
其中该槽与QPushButton::clicked()
信号绑定;
当用户点击按钮后发送该信号, 槽将会做到:
- 调整
QWidget
基于Screen
的位置- 调整
QPushButton
控件基于QWidget
的位置- 设置
WindowTitle
为"The Button clicked"
代码为如下:
//////////////////////////////////////////
///////////////* widget.h *///////////////
//////////////////////////////////////////
QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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
}
演示效果如下: