Qt坐标系统

示例:

头文件

#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)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值