Qt平滑弹出页面
目标功能:
(1)按下btn,弹出绿色页面。
(2)按下btn2,绿色页面隐藏。
(3)按下左边余下的区域,绿色页面也隐藏。
(4)平滑地显示和隐藏
效果:
form.h
-
-
-
-
-
-
namespace Ui {
-
class Form;
-
}
-
-
class Form : public QWidget
-
{
-
Q_OBJECT
-
-
public:
-
explicit Form(QWidget *parent = nullptr);
-
~Form();
-
-
private slots:
-
void on_pushButton_clicked();
-
-
private:
-
Ui::Form *ui;
-
signals:
-
void begin_move();
-
};
-
-
form.cpp
-
-
-
-
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
-
-
-
-
-
-
-
-
QT_BEGIN_NAMESPACE
-
namespace Ui { class Widget; }
-
QT_END_NAMESPACE
-
-
class Widget : public QWidget
-
{
-
Q_OBJECT
-
-
public:
-
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;
-
};
-
widget.cpp
-
-
-
-
-
-
-
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;
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhiagibb
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
excel打印预览压线压字怎么办
PHP中文网 06-22