如何在小部件大小更改时获取信号
How to get a signal when the widget size changes
当小部件(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);
}
相关文章:
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- QT - 如何从 QVector<QComboBox* 获取信号"currentIndexChanged">
- C++ QT:获取指向信号的指针和插槽功能的函数
- 如何在打印机完成打印时从打印机获取Qt信号?
- 如何在小部件大小更改时获取信号
- Qt 如何获取发送者信号的发送者或如何知道 QWebEngineView 的加载启动网址
- 如何获取禁用的QAction元素的触发信号
- 无法获取数据槽中的发送方对象QAbstractItemModel的信号已更改
- 如何在自定义信号处理程序中以编程方式获取sigterm的默认行为
- 处理POSIX信号:如何在不使用BackTrace_symbols的情况下获取堆栈跟踪
- 有没有一种方法可以获取在处理信号期间访问的指针
- 如何获取类似 QIODevice 的控制台输入信号 (stdin)
- 在发出等待条件变量的信号后,线程何时获取锁?是什么决定了它
- 从视图中获取QComboBox的信号
- 如何使用 pthread 获取信号量的信息
- Windows/C++:如何从信号处理程序中获取有用的堆栈跟踪
- 正在尝试从复选框更改中获取信号
- 主线程无法从工作线程获取信号
- Qt获取信号调用者并逐行读取文件
- 获取信号SIGABRT