如何在小部件大小更改时获取信号

How to get a signal when the widget size changes

本文关键字:获取 信号 小部      更新时间:2023-10-16

当小部件(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()));
}

当小部件大小更改时,它会"调用"refresh函数,该函数使用当前宽度高度更新标签。注意:这只是一个可以轻松复制的示例。


当然我可以使用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()并从该方法调用刷新:

*.h

protected:
    void resizeEvent(QResizeEvent *event);

*。.cpp

void MyForm::resizeEvent(QResizeEvent *event)
{
    refresh();
    QWidget::resizeEvent(event);
}