QT::TestQResizeEvent操作
前言:
本文操作均为在vs2015+QT5.9.5版本中执行
头文件:testqresizeevent.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_testqresizeevent.h"
class TestQResizeEvent : public QWidget
{
Q_OBJECT
public:
TestQResizeEvent(QWidget *parent = Q_NULLPTR);
bool event(QEvent * ev);
void resizeEvent(QResizeEvent *re)//这里是重载resizeEvent事件,别把r写成大写的了
{
//ui.label->resize(宽度随着窗口改变, 窗口高度-标签的高度=高度的相对坐标);
ui.label->resize(width(), height() - ui.label->y());
}
private:
Ui::TestQResizeEventClass ui;
};
UI文件:testqresizeevent.ui
/********************************************************************************
** Form generated from reading UI file 'testqresizeevent.ui'
**
** Created by: Qt User Interface Compiler version 5.9.5
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_TESTQRESIZEEVENT_H
#define UI_TESTQRESIZEEVENT_H
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_TestQResizeEventClass
{
public:
QLabel *label;
void setupUi(QWidget *TestQResizeEventClass)
{
if (TestQResizeEventClass->objectName().isEmpty())
TestQResizeEventClass->setObjectName(QStringLiteral("TestQResizeEventClass"));
TestQResizeEventClass->resize(800, 700);
label = new QLabel(TestQResizeEventClass);
label->setObjectName(QStringLiteral("label"));
label->setGeometry(QRect(0, 30, 800, 670));
label->setStyleSheet(QString::fromUtf8("background-color: rgb(0, 255, 255);\n"
"font: 24pt \"\351\273\221\344\275\223\";"));
label->setAlignment(Qt::AlignCenter);
retranslateUi(TestQResizeEventClass);
QMetaObject::connectSlotsByName(TestQResizeEventClass);
} // setupUi
void retranslateUi(QWidget *TestQResizeEventClass)
{
TestQResizeEventClass->setWindowTitle(QApplication::translate("TestQResizeEventClass", "TestQResizeEvent", Q_NULLPTR));
label->setText(QApplication::translate("TestQResizeEventClass", "TextLabel", Q_NULLPTR));
} // retranslateUi
};
namespace Ui {
class TestQResizeEventClass: public Ui_TestQResizeEventClass {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_TESTQRESIZEEVENT_H
主函数:main.cpp
#include "testqresizeevent.h"
#include <QtWidgets/QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
TestQResizeEvent w;
w.show();
return a.exec();
}
实现文件:testqresizeevent.cpp
#include "testqresizeevent.h"
#include <QResizeEvent>
#include <QDebug>
TestQResizeEvent::TestQResizeEvent(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
}
bool TestQResizeEvent::event(QEvent * ev)
{
if (ev->type() == QEvent::Resize)
{
//转换获取到的事件为QResizeEvent类型
QResizeEvent* re = static_cast<QResizeEvent*>(ev);
//re->oldSize()获取没变化之前的大小
//re->size()获取改变之后的大小
qDebug() << "Resize old" << re->oldSize() << "\n" << re->size();
}
return QWidget::event(ev);//激活QWidget里控件的所有事件
}