点击QToolButtoon弹出一个widget,widget上有一个按钮,点击按钮后开始播放动画,当动画播放结束的时候发送finish信号,通知窗口关闭函数去关闭当前窗口。
点击按钮播放此动画
直接拖控件完成布局
上代码:
main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include "cartoonwidget.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_toolButton_clicked();
private:
CartoonWidget *cartoonWidget;
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_toolButton_clicked()
{
cartoonWidget = new CartoonWidget;
cartoonWidget->show();
}
ui_widget.h
能自己拖控件的话,这个头文件就不需要了,建一个widget程序就可以了
/********************************************************************************
** Form generated from reading UI file 'widget.ui'
**
** Created by: Qt User Interface Compiler version 5.13.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_WIDGET_H
#define UI_WIDGET_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QToolButton>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_Widget
{
public:
QLabel *label;
QToolButton *toolButton;
void setupUi(QWidget *Widget)
{
if (Widget->objectName().isEmpty())
Widget->setObjectName(QString::fromUtf8("Widget"));
Widget->resize(480, 800);
label = new QLabel(Widget);
label->setObjectName(QString::fromUtf8("label"));
label->setGeometry(QRect(220, 280, 41, 30));
toolButton = new QToolButton(Widget);
toolButton->setObjectName(QString::fromUtf8("toolButton"));
toolButton->setGeometry(QRect(150, 180, 200, 111));
toolButton->setToolButtonStyle(Qt::ToolButtonIconOnly);
toolButton->raise();
label->raise();
retranslateUi(Widget);
QMetaObject::connectSlotsByName(Widget);
} // setupUi
void retranslateUi(QWidget *Widget)
{
Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
label->setText(QString());
toolButton->setText(QString());
} // retranslateUi
};
namespace Ui {
class Widget: public Ui_Widget {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_WIDGET_H
cartoonwidget.h
#ifndef CARTOONWIDGET_H
#define CARTOONWIDGET_H
#include <QWidget>
#include <QMovie>
namespace Ui {
class cartoonWidget;
}
class CartoonWidget : public QWidget
{
Q_OBJECT
public:
explicit CartoonWidget(QWidget *parent = nullptr);
~CartoonWidget();
private slots:
void on_toolButton_clicked();
void closeWidget();
private:
Ui::cartoonWidget *ui;
QMovie *movie;
};
#endif // CARTOONWIDGET_H
cartoonwidget.cpp
#include "cartoonwidget.h"
#include "ui_cartoonwidget.h"
#include <QThread>
#include <QApplication>
CartoonWidget::CartoonWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::cartoonWidget)
{
ui->setupUi(this);
movie = new QMovie(":/E:/ProjectCode/CXPM/cxpm/PrinterUI/image/printImage/longPressReturn.gif");
QImage img(":/E:/ProjectCode/CXPM/cxpm/PrinterUI/image/printImage/longPressReturn.gif");
ui->label->setGeometry(160, 610, img.width(), img.height());
ui->label->setMovie(movie);
connect(movie, &QMovie::finished, this, &CartoonWidget::closeWidget);
}
CartoonWidget::~CartoonWidget()
{
if (movie != nullptr) {
delete movie;
}
delete ui;
}
void CartoonWidget::on_toolButton_clicked()
{
ui->toolButton->hide();
movie->start();
for (int i = 0; i < 2500; i += movie->speed()) {
QCoreApplication::processEvents();
QThread::usleep(static_cast<unsigned long>(500 * movie->speed()));
}
movie->finished();
}
void CartoonWidget::closeWidget()
{
this->close();
}
ui_cartoonwidget.h
能自己拖控件的话,这个头文件也不需要了,建一个widget程序就可以了
/********************************************************************************
** Form generated from reading UI file 'cartoonwidget.ui'
**
** Created by: Qt User Interface Compiler version 5.13.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
#ifndef UI_CARTOONWIDGET_H
#define UI_CARTOONWIDGET_H
#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <QtWidgets/QToolButton>
#include <QtWidgets/QWidget>
QT_BEGIN_NAMESPACE
class Ui_cartoonWidget
{
public:
QToolButton *toolButton;
QLabel *label;
void setupUi(QWidget *cartoonWidget)
{
if (cartoonWidget->objectName().isEmpty())
cartoonWidget->setObjectName(QString::fromUtf8("cartoonWidget"));
cartoonWidget->resize(480, 800);
cartoonWidget->setMinimumSize(QSize(480, 800));
cartoonWidget->setMaximumSize(QSize(480, 800));
toolButton = new QToolButton(cartoonWidget);
toolButton->setObjectName(QString::fromUtf8("toolButton"));
toolButton->setGeometry(QRect(160, 610, 111, 81));
label = new QLabel(cartoonWidget);
label->setObjectName(QString::fromUtf8("label"));
label->setGeometry(QRect(160, 610, 111, 81));
label->raise();
toolButton->raise();
retranslateUi(cartoonWidget);
QMetaObject::connectSlotsByName(cartoonWidget);
} // setupUi
void retranslateUi(QWidget *cartoonWidget)
{
cartoonWidget->setWindowTitle(QCoreApplication::translate("cartoonWidget", "Form", nullptr));
toolButton->setText(QString());
label->setText(QString());
} // retranslateUi
};
namespace Ui {
class cartoonWidget: public Ui_cartoonWidget {};
} // namespace Ui
QT_END_NAMESPACE
#endif // UI_CARTOONWIDGET_H
运行效果如下:
点击弹出from窗口
点击中间的按钮开始播放动画
动画播放结束后此窗口被关闭。
需要源代码的自己点一下下载,免费的
https://download.csdn.net/download/shejun6/13217635