C++ 当小部件大小改变时如何获取信号

C++ 当小部件大小改变时如何获取信号,c++,qt,qt5,C++,Qt,Qt5,当小部件(MyForm)的大小改变时,我需要执行一个操作 当小部件的大小改变时是否会发出信号?(我在文件中找不到) 我需要这样做: #include "myform.h" #include "ui_myform.h" MyForm::MyForm(QWidget *parent) : QWidget(parent), ui(new Ui::MyForm) { ui->setupUi(this); connect(this, SIGNAL(sizeChan

当小部件(
MyForm
)的大小改变时,我需要执行一个操作

当小部件的大小改变时是否会发出信号?(我在文件中找不到)

我需要这样做:

#include "myform.h"
#include "ui_myform.h"

MyForm::MyForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyForm)
{
    ui->setupUi(this);

    connect(this, SIGNAL(sizeChanged()), this, SLOT(refresh()));
}

MyForm::~MyForm()
{
    delete ui;
}

void MyForm::refresh()
{
    ui->label->setText( QString::number(this->width()) + ", " + QString::number(this->height()));
}
当小部件大小改变时,它“调用”刷新函数,该函数用当前的宽度和高度更新标签注意:这只是一个很容易复制的示例


当然我可以使用
QTimer
,例如:

#include "myform.h"
#include "ui_myform.h"

MyForm::MyForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyForm)
{
    ui->setupUi(this);

    timer_ = new QTimer(this);
    connect(timer_, SIGNAL(timeout()), this, SLOT(refresh()));

    timer_->start(100);
}

MyForm::~MyForm()
{
    delete ui;
}

void MyForm::refresh()
{
    ui->label->setText( QString::number(this->width()) + ", " + QString::number(this->height()));
}
但我认为这不是最好的解决办法


注意:我正在使用Qt 5.3。

不需要创建信号,只需覆盖
resizeEvent()
并从该方法调用refresh:

*.h

protected:
    void resizeEvent(QResizeEvent *event);
*.cpp

void MyForm::resizeEvent(QResizeEvent *event)
{
    refresh();
    QWidget::resizeEvent(event);
}
你需要重写。