窗体坐标和区域大小各种位置信息

窗体坐标和区域大小各种位置信息

Qt提供了很多关于获取窗体位置以及显示区域大小的函数,包括窗体的坐在点位置、长、宽、尺寸信息等。 
1、创建头文件geometry.h,声明继承于QDialog的类

#ifndef GEOMETRY_H
#define GEOMETRY_H

#include <QtGui>

class Geometry : public QDialog
{
    Q_OBJECT
public:
    Geometry();

    QLabel *label1;
    QLabel *label2;
    QLabel *label3;
    QLabel *label4;
    QLabel *label5;
    QLabel *label6;
    QLabel *label7;
    QLabel *label8;
    QLabel *label9;

    QLabel *xLabel;
    QLabel *yLabel;
    QLabel *frameGeoLabel;
    QLabel *posLabel;
    QLabel *geoLabel;
    QLabel *widthLabel;
    QLabel *heightLabel;
    QLabel *rectLabel;
    QLabel *sizeLabel;

    void updateLabel();

protected:
    void moveEvent(QMoveEvent *);
    void resizeEvent(QResizeEvent *);
};

#endif // GEOMETRY_H
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

2、创建geometry.cpp,实现函数功能

#include "geometry.h"

Geometry::Geometry()
{
    setWindowTitle(tr("Geometry"));//设置窗体标题

    label1 = new QLabel;
    label1->setText("x():");
    label2 = new QLabel;
    label2->setText("y():");
    label3 = new QLabel;
    label3->setText("frameGeometry():");
    label4 = new QLabel;
    label4->setText("pos()");
    label5 = new QLabel;
    label5->setText("geometry():");
    label6 = new QLabel;
    label6->setText("width():");
    label7 = new QLabel;
    label7->setText("height():");
    label8 = new QLabel;
    label8->setText("rect():");
    label9 = new QLabel;
    label9->setText("size():");

    xLabel = new QLabel;
    yLabel = new QLabel;
    frameGeoLabel = new QLabel;
    posLabel = new QLabel;
    geoLabel = new QLabel;
    widthLabel = new QLabel;
    heightLabel = new QLabel;
    rectLabel = new QLabel;
    sizeLabel = new QLabel;

    QGridLayout *layout = new QGridLayout(this);
    layout->setMargin(20);//布局边界空白
    layout->setSpacing(10);//布局内部组件之间空白,注意这两者之间的区别

    int l = 0;
    int c = 1;
    layout->addWidget(label1,0,l);
    layout->addWidget(xLabel,0,c);
    layout->addWidget(label2,1,l);
    layout->addWidget(yLabel,1,c);
    layout->addWidget(label3,2,l);
    layout->addWidget(frameGeoLabel,2,c);
    layout->addWidget(label4,3,l);
    layout->addWidget(posLabel,3,c);
    layout->addWidget(label5,4,l);
    layout->addWidget(geoLabel,4,c);
    layout->addWidget(label6,5,l);
    layout->addWidget(widthLabel,5,c);
    layout->addWidget(label7,6,l);
    layout->addWidget(heightLabel,6,c);
    layout->addWidget(label8,7,l);
    layout->addWidget(rectLabel,7,c);
    layout->addWidget(label9,8,l);
    layout->addWidget(sizeLabel,8,c);

    //setLayout(layout);
    updateLabel();
}

void Geometry::updateLabel()
{
    QString temp;
    QString temp1;
    QString temp2;
    QString temp3;

    QString str_x;
    xLabel->setText(str_x.setNum(x()));
    QString str_y;
    yLabel->setText(str_y.setNum(y()));
    QString frameGeo;

    frameGeo = temp.setNum(frameGeometry().x()) + ", " + temp1.setNum(frameGeometry().y()) + ", " +
                temp2.setNum(frameGeometry().width()) + ", " + temp3.setNum(frameGeometry().height());
    frameGeoLabel->setText(frameGeo);

    QString position;
    position = temp.setNum(pos().x()) + ", " + temp1.setNum(pos().y());
    posLabel->setText(position);

    QString geo;
    geo = temp.setNum(geometry().x()) + ", " + temp1.setNum(geometry().y()) + ", " +
            temp2.setNum(geometry().width()) + ", " + temp3.setNum(geometry().height());
    geoLabel->setText(geo);

    QString w;
    widthLabel->setText(w.setNum(width()));
    QString h;
    heightLabel->setText(h.setNum(height()));

    QString r;
    r = temp.setNum(rect().x()) + ", " + temp1.setNum(rect().y()) + ", " +
            temp2.setNum(rect().width()) + ", " + temp3.setNum(rect().height());
    rectLabel->setText(r);
    QString s;
    s = temp.setNum(size().width()) + ", " + temp1.setNum(size().height());
    sizeLabel->setText(s);
}

void Geometry::moveEvent(QMoveEvent *)  //重写鼠标移动事件
{
    updateLabel();
}

void Geometry::resizeEvent(QResizeEvent *)//重写窗体尺寸变化事件
{
    updateLabel();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114

3、最后创建main.cpp

#include "geometry.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);
    Geometry *g = new Geometry();
    g->show();
    return app.exec();
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

4、运行后 
geometry

5、大家可以自己拖动一下,或者改变一下窗体尺寸大小,可以看到窗体里面显示的位置信息数据也发生了变化。自己可以查看一下这些函数,看帮助文档

6、代码资源下载

https://blog.csdn.net/onlyshi/article/details/47729953

原文地址:https://www.cnblogs.com/findumars/p/8633006.html