二十二、窗口API函数基础知识
实现以下功能
改变窗口大小后,函数的大小数据发生实时改变
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QLabel>
#include<QGridLayout>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
QGridLayout *gl;
QLabel *labelGeometry;
QLabel *labelGeometryValue;
QLabel *labelWidth;
QLabel *labelWidthValue;
QLabel *labelHeight;
QLabel *labelHeightValue;
QLabel *labelRect;
QLabel *labelRectValue;
QLabel *labelSize;
QLabel *labelSizeValue;
void resizeEvent(QResizeEvent *);
void moveEvent(QMoveEvent *);
void updateLabelFunc();
};
#endif // WIDGET_H
QResizeEvent
重置尺寸事件被发送给已重置尺寸的 Widget。
QMoveEvent
移动事件将发送到已移动到相对于其父级的新位置的小部件。
widget.cpp
整体逻辑是,先实例化对象并且设置位置,然后在resizeEvent函数和moveEvent函数中调用updateLabelFunc()函数,这样就能实现实时显示窗口变化了。
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
resize(300,150);
gl=new QGridLayout(this);
labelGeometry=new QLabel("Geometry():");
labelGeometryValue=new QLabel;
labelWidth=new QLabel("Width():");
labelWidthValue=new QLabel;
labelHeight=new QLabel("Height():");
labelHeightValue=new QLabel;
labelRect=new QLabel("Rect():");
labelRectValue=new QLabel;
labelSize=new QLabel("Size():");
labelSizeValue=new QLabel;
gl->addWidget(labelGeometry,0,0);
gl->addWidget(labelGeometryValue,0,1);
gl->addWidget(labelWidth,1,0);
gl->addWidget(labelWidthValue,1,1);
gl->addWidget(labelHeight,2,0);
gl->addWidget(labelHeightValue,2,1);
gl->addWidget(labelRect,3,0);
gl->addWidget(labelRectValue,3,1);
gl->addWidget(labelSize,4,0);
gl->addWidget(labelSizeValue,4,1);
updateLabelFunc();
}
Widget::~Widget()
{
delete ui;
}
void Widget::updateLabelFunc()
{
QString strGeometry;
QString strGeometryX;
QString strGeometryY;
QString strGeometryWidth;
QString strGeometryHeight;
strGeometry=strGeometryX.setNum(geometry().x())+","+strGeometryY.setNum(geometry().y())+","+strGeometryWidth.setNum(geometry().width())+","+strGeometryHeight.setNum(geometry().height());
labelGeometryValue->setText(strGeometry);
QString strWidth,strHeigth;
labelWidthValue->setText(strWidth.setNum(width()));
labelHeightValue->setText(strHeigth.setNum(height()));
QString strRect;
QString strRectX,strRectY,strRectWidth,strRectHeight;
strRect=strRectX.setNum(rect().x())+","+strRectY.setNum(rect().y())+","+strRectWidth.setNum(rect().width())+','+strHeigth.setNum(rect().height());
labelRectValue->setText(strRect);
QString strSize;
labelSizeValue->setText(strSize.setNum(size().width())+","+strSize.setNum(size().height()));
}
void Widget::resizeEvent(QResizeEvent *)
{
updateLabelFunc();
}
void Widget::moveEvent(QMoveEvent *)
{
updateLabelFunc();
}
代码很简单,并没有出见过没见过的函数。