• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Qt平滑弹出页面

武飞扬头像
kaixin_learn_qt_ing
帮助1

目标功能

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

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

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

(4)平滑地显示和隐藏

效果:

学新通 

 form.h

  1.  
    #ifndef FORM_H
  2.  
    #define FORM_H
  3.  
     
  4.  
    #include <QWidget>
  5.  
     
  6.  
    namespace Ui {
  7.  
    class Form;
  8.  
    }
  9.  
     
  10.  
    class Form : public QWidget
  11.  
    {
  12.  
    Q_OBJECT
  13.  
     
  14.  
    public:
  15.  
    explicit Form(QWidget *parent = nullptr);
  16.  
    ~Form();
  17.  
     
  18.  
    private slots:
  19.  
    void on_pushButton_clicked();
  20.  
     
  21.  
    private:
  22.  
    Ui::Form *ui;
  23.  
    signals:
  24.  
    void begin_move();
  25.  
    };
  26.  
     
  27.  
    #endif // FORM_H
学新通

 form.cpp

  1.  
    #include "form.h"
  2.  
    #include "ui_form.h"
  3.  
     
  4.  
    Form::Form(QWidget *parent) :
  5.  
    QWidget(parent),
  6.  
    ui(new Ui::Form)
  7.  
    {
  8.  
    ui->setupUi(this);
  9.  
    }
  10.  
     
  11.  
    Form::~Form()
  12.  
    {
  13.  
    delete ui;
  14.  
    }
  15.  
     
  16.  
    void Form::on_pushButton_clicked()
  17.  
    {
  18.  
    emit begin_move();
  19.  
    }
学新通

 widget.h

  1.  
    #ifndef WIDGET_H
  2.  
    #define WIDGET_H
  3.  
     
  4.  
    #include <QWidget>
  5.  
    #include "form.h"
  6.  
    #include <QPropertyAnimation>
  7.  
    #include <QMouseEvent>
  8.  
    QT_BEGIN_NAMESPACE
  9.  
    namespace Ui { class Widget; }
  10.  
    QT_END_NAMESPACE
  11.  
     
  12.  
    class Widget : public QWidget
  13.  
    {
  14.  
    Q_OBJECT
  15.  
     
  16.  
    public:
  17.  
    Widget(QWidget *parent = nullptr);
  18.  
    ~Widget();
  19.  
    protected:
  20.  
    void mousePressEvent(QMouseEvent *event) override;
  21.  
    bool eventFilter(QObject *obj,QEvent *event) override;
  22.  
    private slots:
  23.  
    void on_pushButton_clicked();
  24.  
    private:
  25.  
    Ui::Widget *ui;
  26.  
    Form *f;
  27.  
    QPropertyAnimation *animation,*animation1;
  28.  
    bool flag;
  29.  
    bool isShow;
  30.  
    };
  31.  
    #endif // WIDGET_H
学新通

widget.cpp 

  1.  
    #include "widget.h"
  2.  
    #include "ui_widget.h"
  3.  
    #include <QDebug>
  4.  
    #include <QEvent>
  5.  
     
  6.  
    #pragma execution_character_set("utf-8")
  7.  
    Widget::Widget(QWidget *parent)
  8.  
    : QWidget(parent)
  9.  
    , ui(new Ui::Widget)
  10.  
    {
  11.  
    ui->setupUi(this);
  12.  
    f=new Form(this);
  13.  
    f->hide();
  14.  
    flag=1;
  15.  
    isShow=0;
  16.  
    ui->pushButton_2->installEventFilter(this);
  17.  
    connect(f,&Form::begin_move,this,[=](){
  18.  
    if(isShow == 1){
  19.  
    animation1->start();
  20.  
    isShow=0;
  21.  
    }
  22.  
    });
  23.  
    }
  24.  
     
  25.  
    Widget::~Widget()
  26.  
    {
  27.  
    delete ui;
  28.  
    }
  29.  
     
  30.  
    void Widget::mousePressEvent(QMouseEvent *event)
  31.  
    {
  32.  
    if(event->button()==Qt::LeftButton){
  33.  
    qDebug()<<"按下了鼠标左键";
  34.  
    qDebug()<<event->pos();
  35.  
    if(isShow == 1){
  36.  
    animation1->start();
  37.  
    isShow=0;
  38.  
    }
  39.  
    }
  40.  
    }
  41.  
     
  42.  
    bool Widget::eventFilter(QObject *obj, QEvent *event)
  43.  
    {
  44.  
    if(obj==ui->pushButton_2){
  45.  
    if(event->type() == QEvent::MouseButtonPress){
  46.  
    qDebug()<<"按下按钮";
  47.  
    QMouseEvent * me =static_cast<QMouseEvent *>(event);
  48.  
    if(me->button() & Qt::LeftButton){
  49.  
    qDebug()<<"按下左键";
  50.  
    if(isShow == 1){
  51.  
    animation1->start();
  52.  
    isShow=0;
  53.  
    }
  54.  
    }
  55.  
    return false;
  56.  
    }
  57.  
    }
  58.  
    return QWidget::eventFilter(obj,event);
  59.  
    }
  60.  
     
  61.  
    void Widget::on_pushButton_clicked()
  62.  
    {
  63.  
    if(flag==1){
  64.  
    flag=0;
  65.  
    f->resize(300,height());
  66.  
    f->move(width(),0);
  67.  
    f->show();
  68.  
     
  69.  
    animation = new QPropertyAnimation(f,"pos");
  70.  
    animation->setDuration(1000); //设置动画完成的时间长度
  71.  
    animation->setStartValue(QPoint(width(),0)); //设置动画的开始值
  72.  
    animation->setEndValue(QPoint(width()-f->width(),0)); //设置动画的结束值
  73.  
     
  74.  
    animation1 = new QPropertyAnimation(f,"pos");
  75.  
    animation1->setDuration(1000); //设置动画完成的时间长度
  76.  
    animation1->setStartValue(QPoint(width()-f->width(),0)); //设置动画的开始值
  77.  
    animation1->setEndValue(QPoint(width(),0)); //设置动画的结束值
  78.  
    }
  79.  
    animation->start(); //启动动画
  80.  
    isShow=1;
  81.  
    }
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiagibb
系列文章
更多 icon
同类精品
更多 icon
继续加载