Qt实现窗口同比例放大/缩小

实现思路:

Qt中有resizeEvent事件,该事件当窗口大小改变时便会产生响应,所以可利用此来实现窗口同比例缩放问题,但是由于resizeEvent事件是随着窗口大小改变不断刷新的,因此在重写resizeEvent时,直接改变窗口大小,代码会产生冲突,无法决断该放大和缩小,因此为了判别resizeEvent事件结束,又重写了NonCientAreaMouseButtonRelease事件,该事件表示在非客户端区域鼠标键释放,(非客户区域概念可参考 https://blog.csdn.net/godqiao/article/details/78581883),鼠标左键释放,表示事件绘制完成,因此,便可以在此处实现更改窗口的大小的代码。

 

实现步骤:

在.h文件下声明

protected: 
   virtual bool event(QEvent *event);

在.cpp文件下

bool Classname::event(QEvent *event)
{
    if(event->type() == QEvent::NonClientAreaMouseButtonRelease)
    {
        update_size(); //调用绘制窗口大小的函数
        return true;  //返回true该事件在此处被处理后,不用传到父类
    }
    else if(event->type() == QEvent::Resize)
    {

        /*更新此时的页面宽度和长度*/        
        screen_width[0] = this->geometry().width();  
        screen_height[0] = this->geometry().height();
        return true;
    }
    else
    {

        return QWidget::event(event);
    }

}


void Classname::update__size()
{
     //设置一个大小为2的数组,一个用来存新值,一个用来存旧值,通过比较判断为页面放大操作还是缩小操作
     if(screen_height[0]>screen_height[1] || screen_width[0]>screen_width[1])
     {
        this->resize((screen_height[0]>screen_width[0]?screen_height[0]:screen_width[0])-10,(screen_height[0]>screen_width[0]?screen_height[0]:screen_width[0])-10);

     }
     if(screen_height[0]<screen_height[1] || screen_width[0]<screen_width[1])
     {
         this->resize((screen_height[0]<screen_width[0]?screen_height[0]:screen_width[0])-10,(screen_height[0]<screen_width[0]?screen_height[0]:screen_width[0])-10);

     }
     screen_width[1] = screen_width[0];
     screen_height[1] = screen_height[0];

}

 

结尾:

在实际操作中,若鼠标拖动过快,会出现无响应的事件,单击非可客户区域即可解决。

(因本人能力有限,若有纰漏请指出,若是有更好的方法,欢迎讨论)

  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值