我需要在窗口小部件(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。
答案 0 :(得分:1)
没有必要创建信号,您只需要覆盖resizeEvent()
并从该方法调用refresh:
<强> *的.h 强>
protected:
void resizeEvent(QResizeEvent *event);
<强> *。CPP 强>
void MyForm::resizeEvent(QResizeEvent *event)
{
refresh();
QWidget::resizeEvent(event);
}