qt QResizeEvent详解

1、概述

QResizeEvent是Qt框架中用于处理窗口或控件大小变化事件的一个类。当用户调整窗口或控件的尺寸时,Qt会生成一个QResizeEvent事件,并将其发送到相应的窗口或控件。开发者可以通过重载窗口或控件的resizeEvent()方法来响应这个事件,并执行相应的操作,如调整布局、更新视图等。

2、重要方法

QResizeEvent类提供了一些方法来获取事件的相关信息:

  • size():返回新的尺寸,即窗口或控件调整后的尺寸。这个方法返回一个QSize对象,其中包含了宽度和高度信息。
  • oldSize():返回旧的尺寸,即窗口或控件调整前的尺寸。同样,这个方法也返回一个QSize对象。

这两个方法是QResizeEvent类中最常用的,它们允许开发者根据窗口或控件的大小变化来执行相应的操作。

3、重要信号

与QFocusEvent不同,QResizeEvent本身并不提供信号。在Qt的事件处理机制中,事件(如QResizeEvent)和信号/槽机制是两种独立但互补的通信方式。事件通常用于处理低级别的、需要即时响应的用户交互(如鼠标点击、键盘输入、窗口大小变化等),而信号/槽机制则更适用于对象之间的通信和状态变化通知。

因此,当窗口或控件的大小发生变化时,Qt会生成一个QResizeEvent事件并将其发送到相应的对象。开发者需要在该对象中重载resizeEvent()方法来处理这个事件。如果需要在大小变化后通知其他对象或执行某些操作,可以在resizeEvent()方法内部使用信号/槽机制或其他通信方式。

#include <QWidget>  
#include <QResizeEvent>  
#include <QLabel>  
#include <QVBoxLayout>  
  
class MyWidget : public QWidget {  
    Q_OBJECT  
  
public:  
    MyWidget(QWidget *parent = nullptr) : QWidget(parent) {  
        QVBoxLayout *layout = new QVBoxLayout(this);  
        sizeLabel = new QLabel("Current size: ", this);  
        layout->addWidget(sizeLabel);  
        setLayout(layout);  
    }  
  
protected:  
    void resizeEvent(QResizeEvent *event) override {  
        // 获取新的尺寸  
        QSize newSize = event->size();  
        // 更新标签文本以显示新的尺寸  
        sizeLabel->setText(QString("Current size: %1x%2").arg(newSize.width()).arg(newSize.height()));  
        // 调用基类的resizeEvent方法,确保事件正常传递(虽然在这个例子中不是必需的)  
        QWidget::resizeEvent(event);  
    }  
  
private:  
    QLabel *sizeLabel;  
};  
  
// 在主程序中使用MyWidget  
#include <QApplication>  
  
int main(int argc, char *argv[]) {  
    QApplication app(argc, argv);  
  
    MyWidget window;  
    window.show();  
  
    return app.exec();  
}

觉得有帮助的话,打赏一下呗。。

           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值