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

时间:2018-01-05 18:54:20

标签: 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(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。

1 个答案:

答案 0 :(得分:1)

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

<强> *的.h

protected:
    void resizeEvent(QResizeEvent *event);

<强> *。CPP

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