gpt4 book ai didi

c++ - 小部件大小更改时如何获取信号

转载 作者:行者123 更新时间:2023-11-30 03:26:41 25 4
gpt4 key购买 nike

我需要在小部件 (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);
}

关于c++ - 小部件大小更改时如何获取信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48119645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com