当前位置: 首页 > news >正文

Qt平滑弹出页面

目标功能:

(1)按下btn,弹出绿色页面。

 (2)按下btn2,绿色页面隐藏。

 (3)按下左边余下的区域,绿色页面也隐藏。

(4)平滑地显示和隐藏

效果:

 

 form.h

#ifndef FORM_H
#define FORM_H#include <QWidget>namespace Ui {
class Form;
}class Form : public QWidget
{Q_OBJECTpublic:explicit Form(QWidget *parent = nullptr);~Form();private slots:void on_pushButton_clicked();private:Ui::Form *ui;
signals:void begin_move();
};#endif // FORM_H

 form.cpp

#include "form.h"
#include "ui_form.h"Form::Form(QWidget *parent) :QWidget(parent),ui(new Ui::Form)
{ui->setupUi(this);
}Form::~Form()
{delete ui;
}void Form::on_pushButton_clicked()
{emit begin_move();
}

 widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include "form.h"
#include <QPropertyAnimation>
#include <QMouseEvent>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
protected:void mousePressEvent(QMouseEvent *event) override;bool eventFilter(QObject *obj,QEvent *event) override;
private slots:void on_pushButton_clicked();
private:Ui::Widget *ui;Form *f;QPropertyAnimation *animation,*animation1;bool flag;bool isShow;
};
#endif // WIDGET_H

widget.cpp 

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QEvent>#pragma execution_character_set("utf-8")
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);f=new Form(this);f->hide();flag=1;isShow=0;ui->pushButton_2->installEventFilter(this);connect(f,&Form::begin_move,this,[=](){if(isShow == 1){animation1->start();isShow=0;}});
}Widget::~Widget()
{delete ui;
}void Widget::mousePressEvent(QMouseEvent *event)
{if(event->button()==Qt::LeftButton){qDebug()<<"按下了鼠标左键";qDebug()<<event->pos();if(isShow == 1){animation1->start();isShow=0;}}
}bool Widget::eventFilter(QObject *obj, QEvent *event)
{if(obj==ui->pushButton_2){if(event->type() == QEvent::MouseButtonPress){qDebug()<<"按下按钮";QMouseEvent * me =static_cast<QMouseEvent *>(event);if(me->button() & Qt::LeftButton){qDebug()<<"按下左键";if(isShow == 1){animation1->start();isShow=0;}}return false;}}return QWidget::eventFilter(obj,event);
}void Widget::on_pushButton_clicked()
{if(flag==1){flag=0;f->resize(300,height());f->move(width(),0);f->show();animation = new QPropertyAnimation(f,"pos");animation->setDuration(1000);  //设置动画完成的时间长度animation->setStartValue(QPoint(width(),0)); //设置动画的开始值animation->setEndValue(QPoint(width()-f->width(),0)); //设置动画的结束值animation1 = new QPropertyAnimation(f,"pos");animation1->setDuration(1000);  //设置动画完成的时间长度animation1->setStartValue(QPoint(width()-f->width(),0)); //设置动画的开始值animation1->setEndValue(QPoint(width(),0)); //设置动画的结束值}animation->start(); //启动动画isShow=1;
}

 

http://www.lryc.cn/news/128608.html

相关文章:

  • 第07天 Static关键字作用及用法
  • Redis扩容与一致性Hash算法解析
  • 【第七讲---视觉里程计1】
  • Linux: sched: might_sleep; 一个调试函数,演变为真实的睡眠函数,实至名归
  • (三) 搞定SOME/IP通信之CommonAPI库
  • windows bat脚本,使用命令行增加/删除防火墙:入站-出站,规则
  • Stable Diffusion 告别复制关键词,高质量提示词自动生成插件
  • 【学习日记】【FreeRTOS】任务调度时如何考虑任务优先级——任务的自动切换
  • C语言暑假刷题冲刺篇——day3
  • Taro+vue3小程序开启分享他人和分享到朋友圈
  • JAVA-Spring中IOC容器是什么?
  • QT多屏显示程序
  • python使用xlwt时,报ValueError: More than 4094 XFs (styles)
  • GitHub 打不开解决方案
  • Java网络编程(一)网络基础
  • matlab使用教程(17)—多项式的定义和运算
  • 华为认证 | 这门HCIA认证正式发布!
  • 【Docker】Docker安装 MySQL 8.0,简洁版-快速安装使用
  • CSS自己实现一个步骤条
  • Visual Studio 2019 解决scanf函数报错问题
  • 亚马逊无限买家号如何注册?
  • 前端框架学习-ES6新特性(尚硅谷web笔记)
  • 普陀发布新规服务元宇宙企业 和数软件发展元宇宙场景落地
  • Kotlin差异化分析,let,run,with,apply及also
  • (stm32)低功耗模式
  • 【C++学习手札】一文带你认识C++虚函数(内层剖析)
  • Python“牵手”1688商品评论数据采集方法,1688API申请指南
  • “深入解析JVM内部机制:探秘Java虚拟机的奥秘“
  • 【系统工具】开源服务器监控工具WGCLOUD初体验
  • powerBI应用技巧