『 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
}

演示效果如下:

相关推荐
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz9 天前
QML Hello World 入门示例
qt
xcyxiner12 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner13 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner13 天前
DicomViewer (添加模型类)3
qt
xcyxiner14 天前
DicomViewer (目录调整) 2
qt
xcyxiner14 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00616 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术16 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript