示例:
头文件
#ifndef GEOMETRY_H
#define GEOMETRY_H
#include <QDialog>
#include <QLabel>
#include <QGridLayout>
#include <QMoveEvent>
#include <QResizeEvent>
class Geometry : public QDialog
{
Q_OBJECT
public:
Geometry(QWidget *parent = 0);
~Geometry();
//
void updateLable();
private:
QLabel * m_xLable;
QLabel * m_xValueLable;
QLabel * m_yLable;
QLabel * m_yValueLable;
QLabel * m_frmLable;
QLabel * m_frmValueLable;
QLabel * m_posLable;
QLabel * m_posValueLable;
QLabel * m_geoLable;
QLabel * m_geoValueLable;
QLabel * m_widthLable;
QLabel * m_widthValueLable;
QLabel * m_heightLable;
QLabel * m_heightValueLable;
QLabel * m_rectLable;
QLabel * m_rectValueLable;
QLabel * m_sizeLable;
QLabel * m_sizeValueLable;
QGridLayout * m_mainLable;
protected:
virtual void moveEvent(QMoveEvent *);
virtual void resizeEvent(QResizeEvent *);
};
#endif // GEOMETRY_H
源文件
#include "Geometry.h"
#include <QString>
Geometry::Geometry(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(tr("Geometry"));
m_xLable = new QLabel("x():");
m_xValueLable = new QLabel();
m_yLable = new QLabel("y():");
m_yValueLable = new QLabel();
m_frmLable = new QLabel("Frame():");
m_frmValueLable = new QLabel();
m_posLable = new QLabel("pos():");
m_posValueLable = new QLabel();
m_geoLable = new QLabel("geometry():");
m_geoValueLable = new QLabel();
m_widthLable = new QLabel("width():");
m_widthValueLable = new QLabel();
m_heightLable = new QLabel("height():");
m_heightValueLable = new QLabel();
m_rectLable = new QLabel("rect():");
m_rectValueLable = new QLabel();
m_sizeLable = new QLabel("size():");
m_sizeValueLable = new QLabel();
m_mainLable = new QGridLayout(this);
m_mainLable->addWidget(m_xLable,0,0);
m_mainLable->addWidget(m_xValueLable,0,1);
m_mainLable->addWidget(m_yLable,1,0);
m_mainLable->addWidget(m_yValueLable,1,1);
m_mainLable->addWidget(m_frmLable,2,0);
m_mainLable->addWidget(m_frmValueLable,2,1);
m_mainLable->addWidget(m_posLable,3,0);
m_mainLable->addWidget(m_posValueLable,3,1);
m_mainLable->addWidget(m_geoLable,4,0);
m_mainLable->addWidget(m_geoValueLable,4,1);
m_mainLable->addWidget(m_heightLable,5,0);
m_mainLable->addWidget(m_heightValueLable,5,1);
m_mainLable->addWidget(m_widthLable,6,0);
m_mainLable->addWidget(m_widthValueLable,6,1);
m_mainLable->addWidget(m_rectLable,7,0);
m_mainLable->addWidget(m_rectValueLable,7,1);
m_mainLable->addWidget(m_sizeLable,8,0);
m_mainLable->addWidget(m_sizeValueLable,8,1);
updateLable();
}
Geometry::~Geometry()
{
}
void Geometry::updateLable()
{
QString xStr;
m_xValueLable->setText(xStr.setNum(x()));
QString yStr;
m_yValueLable->setText(yStr.setNum(y()));
QString frameStr;
QString tempStr1, tempStr2, tempStr3, tempStr4;
frameStr = tempStr1.setNum(frameGeometry().x()) + "," +
tempStr2.setNum(frameGeometry().y()) + "," +
tempStr3.setNum(frameGeometry().width()) + "," +
tempStr4.setNum(frameGeometry().height());
m_frmValueLable->setText(frameStr);
QString positionStr;
QString tempStr11, tempStr12;
positionStr = tempStr11.setNum(pos().x()) + "," +
tempStr12.setNum(pos().y());
m_posValueLable->setText(positionStr);
QString geoStr;
QString tempStr21, tempStr22, tempStr23, tempStr24;
geoStr = tempStr21.setNum(geometry().x()) + "," +
tempStr22.setNum(geometry().y()) + "," +
tempStr23.setNum(geometry().width()) + "," +
tempStr24.setNum(geometry().height());
m_geoValueLable->setText(geoStr);
QString wStr, hStr;
m_widthValueLable->setText(wStr.setNum(width()));
m_heightValueLable->setText(hStr.setNum(height()));
QString rectStr;
QString tempStr31, tempStr32, tempStr33, tempStr34;
rectStr = tempStr31.setNum(rect().x()) + "," +
tempStr32.setNum(rect().y()) + "," +
tempStr33.setNum(rect().width()/*width()*/) + "," +
tempStr34.setNum(rect().height()/*height()*/);
m_rectValueLable->setText(rectStr);
QString sizeStr;
QString tempStr41, tempStr42;
sizeStr = tempStr11.setNum(size().width()) + "," +
tempStr12.setNum(size().height());
m_sizeValueLable->setText(sizeStr);
}
void Geometry::moveEvent(QMoveEvent *)
{
updateLable();
}
void Geometry::resizeEvent(QResizeEvent *)
{
updateLable();
}
心得
Qt提供了很多关于获取窗体位置及显示区域大小的函数,如x() y()和pos() rect() size()
geometry()等,统称为“位置相关函数”或位置函数。
- x()、y()、pos()函数的作用是获得整个窗体左上角的坐标信息。
- frameGeomerty()与geometry()相对应。frameGeometry()是获得整个窗体的左上顶点的位置,以及整个窗体的长和宽,
- 而geometry()函数获得的是窗体内中央区域的左上顶点坐标及长和宽。
- width()和height()函数获得就是中央区域的长和宽。
- rect()、size()函数获得的结果也是窗体中央区域的。size()获得是窗体中央区域的长和宽的值;
- rect()与geometry()相同,返回一个QRect对象,这两个函数获得长和宽是相同的,都是窗体中央区域的长和宽的值,指示左上顶点的坐标值不一样,geometry()获得的左上顶点是相对于父窗体而言的坐标,而rect()获得的左上顶点坐标始终未(0,0)。