C++版QT:获取窗体位置

目录

1、QT窗体位置简介

2、获取窗体位置

Geometry.h:

Geometry.cpp:

mian.cpp:

3、结果


1、QT窗体位置简介

在Qt中,窗体(通常是一个QWidget或其子类的实例)的位置和显示区域可以通过几种方式来获取。以下是一些常用的方法:

**获取窗体的位置(Position):**使用pos()方法可以获取窗体的位置。这个方法返回一个QPoint对象,表示窗体的左上角在屏幕上的位置。

**获取窗体的尺寸(Size):**使用size()方法可以获取窗体的尺寸。这个方法返回一个QSize对象,表示窗体的宽度和高度。

**获取窗体的显示区域(Visible Rectangle):**如果你想获取窗体的可见区域(即窗体在屏幕上实际显示的区域),可以使用frameGeometry()方法。这个方法返回一个QRect对象,表示窗体的几何信息,包括其在屏幕上的位置和大小。

**获取窗体的最小尺寸和最大尺寸:**minimumSize()和maximumSize()方法分别返回窗体的最小和最大尺寸。这些尺寸可以用于限制窗体的大小调整范围。

**直接读取属性:**直接读取窗体的属性,如width, height, x, y等,可以得到相关的尺寸信息。这些属性反映了当前的状态。

2、获取窗体位置

Geometry.h:

cpp 复制代码
#ifndef GEOMETRY_H
#define GEOMETRY_H
​
#include <QDialog>
#include <QLabel>
#include <QGridLayout>
​
class Geometry : public QDialog
{
    Q_OBJECT
​
public:
    Geometry(QWidget* parent = 0);
    ~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*);
};
​
#endif // GEOMETRY_H
​

Geometry.cpp:

cpp 复制代码
#include "geometry.h"
​
Geometry::Geometry(QWidget* parent)
    : QDialog(parent)
{
    setWindowTitle(tr("Geometry"));
    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(posLabel, 2, 0);
    mainLayout->addWidget(posValueLabel, 2, 1);
    mainLayout->addWidget(FrmLabel, 3, 0);
    mainLayout->addWidget(FrmValueLabel, 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;                        //获得x()函数的结果并显示
    xValueLabel->setText(xStr.setNum(x()));
​
    QString yStr;                        //获得y()函数的结果并显示
    yValueLabel->setText(yStr.setNum(y()));
​
    QString frameStr;                   //获得frameGeometry()函数的结果并显示
    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;              //获得pos()函数的结果并显示
    QString tempStr11, tempStr12;
    positionStr = tempStr11.setNum(pos().x()) + "," + tempStr12.setNum(pos().y());
    posValueLabel->setText(positionStr);
​
    QString geoStr;                   //获得geometry()函数的结果并显示
    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;                  //获得width()、height()函数的结果并显示
    widthValueLabel->setText(wStr.setNum(width()));
    heightValueLabel->setText(hStr.setNum(height()));
​
    QString rectStr;                    //获得rect()函数的结果并显示
    QString tempStr31, tempStr32, tempStr33, tempStr34;
    rectStr = tempStr31.setNum(rect().x()) + "," + tempStr32.setNum(rect().y()) + "," + tempStr33.setNum(/*rect().width()*/width()) + "," + tempStr34.setNum(height()/*rect().height()*/);
    rectValueLabel->setText(rectStr);
​
    QString sizeStr;                   //获得size()函数的结果并显示
    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();
}
​

mian.cpp:

cpp 复制代码
#include "Geometry.h"
#include <QtWidgets/QApplication>
​
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Geometry w;
    w.show();
    return a.exec();
}
​

3、结果

相关推荐
yxc_inspire2 小时前
基于Qt的app开发第十四天
前端·c++·qt·app·面向对象·qss
nenchoumi31193 小时前
UE5 学习系列(五)导入贴图资产
学习·游戏·ue5·机器人
bug总结3 小时前
记录下three.js学习过程中不理解问题----材质(material)⑤
学习·材质
Cai junhao3 小时前
【Qt】工具介绍和信号与槽机制
开发语言·c++·qt·qt6.3
黑牛先生3 小时前
【Qt】信号与槽
开发语言·qt
Y3174293 小时前
Python Day50 学习(仍为日志Day19的内容复习)
python·学习·机器学习
ThreeYear_s10 小时前
基于FPGA的PID算法学习———实现P比例控制算法
学习·fpga开发
恰薯条的屑海鸥10 小时前
零基础在实践中学习网络安全-皮卡丘靶场(第十一期-目录遍历模块)
学习·安全·web安全·渗透测试·网络安全学习
byte轻骑兵11 小时前
【C++特殊工具与技术】优化内存分配(四):定位new表达式、类特定的new、delete表达式
开发语言·c++
nenchoumi311912 小时前
Swift 6 学习笔记(二)The Basics
笔记·学习·swift