当前位置:   article > 正文

QQuickWidget + QML编程实现酷炫动态动画效果_qquickwidget 动画

qquickwidget 动画

1.具体需求:当Qt开发项目中需要实现简单的动态酷炫动画效果时,我们可以使用Qt中的QQuickWidget来实现,同时还可以使用QML编程来实现具体的动画效果,具体实现的效果如下所示:

2.具体操作和实现效果图:

       1)按下start按钮,音乐播放界面开始播放,然后出现旋转界面(界面的变化可以通过QML编程来具体实现);

        2)  按下stop按钮,音乐播放界面停止;

        3)效果图:(样式没有刻意去设计,QML只是简单的旋转效果)

 stop下的状态图:

开始播放的状态图:

3.具体代码实现分为三部分:

           1)Qt的pro工程文件中加入QQuickWidget功能: QT  +=  quickwidgets

           2)新建一个工程简单的工程,如下所示:

           在工程中添加一个resource新文件,鼠标右键单击工程->添加新文件->Qt->Qt Resource File,然后在resource file下新建一个目录(add prefix),添加一个QML File(Qt Quick 2)文件,取名字为musicPlay.qml,操作步骤和前面一样,添加相关的QML代码,具体如下:

  1. import QtQuick 2.0
  2. Item { //首字母大写
  3. visible: true
  4. width: 150
  5. height: 150
  6. id: rectangleWidget
  7. scale : 1.0
  8. signal sig_startMusic(); //定义四个信号,来和Qt中的具体信号建立连接
  9. signal sig_stopMusic();
  10. signal sig_musicEnable();
  11. signal sig_musicDisable();
  12. function startAnimation() { //类似于槽函数
  13. numberAnimationInf.start();
  14. }
  15. function stopAnimation() {
  16. numberAnimationInf.stop();
  17. }
  18. function setMusicEnable() {
  19. musicEnable.visible = true;
  20. numberAnimationOnce.start();
  21. musicDisable.visible = false;
  22. }
  23. function setMusicDisable() {
  24. musicEnable.visible = false;
  25. musicDisable.visible = true;
  26. }
  27. Image {
  28. id: musicEnable
  29. x : 0
  30. y : 0
  31. width : 80
  32. height: 80
  33. source: "qrc:/music_enable.svg" //所有的svg图标可以从aliicon库中下载
  34. sourceSize.height: 80
  35. sourceSize.width: 80
  36. transformOrigin: Item.Center
  37. visible: true
  38. smooth: true
  39. NumberAnimation on rotation { //设置动态样式为一直动态旋转
  40. id : numberAnimationInf
  41. from: 0
  42. to : 360
  43. duration: 10000
  44. loops: Animation.Infinite
  45. running: false
  46. }
  47. NumberAnimation on rotation { //旋转一次,来切换disable和enable的状态
  48. id : numberAnimationOnce
  49. from: 0
  50. to : 360
  51. duration: 1
  52. loops: 1
  53. running: false
  54. }
  55. }
  56. Image {
  57. id: musicDisable
  58. x : 0
  59. y : 0
  60. width : 80
  61. height: 80
  62. source: "qrc:/music_disable.svg"
  63. sourceSize.height: 80
  64. sourceSize.width: 80
  65. visible: true
  66. smooth: true
  67. }
  68. Component.onCompleted: { //连接图片中的信号和QML对外信号,从而达到Qt界面信号控制动画的效果
  69. rectangleWidget.sig_startMusic.connect(rectangleWidget.startAnimation);
  70. rectangleWidget.sig_stopMusic.connect(rectangleWidget.stopAnimation);
  71. rectangleWidget.sig_musicEnable.connect(rectangleWidget.setMusicEnable);
  72. rectangleWidget.sig_musicDisable.connect(rectangleWidget.setMusicDisable);
  73. }
  74. }

       打开mainwindow.ui界面,在界面左侧拖入一个QQuickWidget和两个QPushButton,将两个按钮的pushbutton改名为start和stop,修改QQuickWidget的相关属性,设置resizeMode属性为SizeRootObjectToView,同时添加source为上文中的qml文件,

      3)在mainwindow.cpp/mainwindow.h中添加相关的信号与槽函数实现相关功能:

             mainwindow.h代码:

  1. #ifndef MAINWINDOW_H
  2. #define MAINWINDOW_H
  3. #include <QMainWindow>
  4. namespace Ui {
  5. class MainWindow;
  6. }
  7. class MainWindow : public QMainWindow
  8. {
  9. Q_OBJECT
  10. public:
  11. explicit MainWindow(QWidget *parent = 0);
  12. ~MainWindow();
  13. signals:
  14. void sig_musicStart();
  15. void sig_musicStop();
  16. void sig_enableMusic();
  17. void sig_disableMusic();
  18. private slots:
  19. void on_pushButtonStart_clicked();
  20. void on_pushButtonStop_clicked();
  21. private:
  22. Ui::MainWindow *ui;
  23. };
  24. #endif // MAINWINDOW_H

    mainwindow.cpp代码:

  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QQuickItem>
  4. MainWindow::MainWindow(QWidget *parent) :
  5. QMainWindow(parent),
  6. ui(new Ui::MainWindow)
  7. {
  8. ui->setupUi(this);
  9. QQuickItem *item = ui->quickWidget->rootObject();
  10. connect(this, SIGNAL(sig_musicStart()), item, SIGNAL(sig_startMusic())); //和QML之间的信号连接
  11. connect(this, SIGNAL(sig_musicStop()), item, SIGNAL(sig_stopMusic()));
  12. connect(this, SIGNAL(sig_enableMusic()), item, SIGNAL(sig_musicEnable()));
  13. connect(this, SIGNAL(sig_disableMusic()), item, SIGNAL(sig_musicDisable()));
  14. connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(on_pushButtonStart_clicked()));
  15. connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(on_pushButtonStop_clicked()));
  16. }
  17. MainWindow::~MainWindow()
  18. {
  19. delete ui;
  20. }
  21. void MainWindow::on_pushButtonStart_clicked()
  22. {
  23. emit sig_enableMusic();
  24. emit sig_musicStart();
  25. }
  26. void MainWindow::on_pushButtonStop_clicked()
  27. {
  28. emit sig_musicStop();
  29. emit sig_disableMusic();
  30. }

3.编译环境:Qt 4.3.0 + MinGW(msvc 2015 32bit)

4. 代码工程免费下载地址: https://download.csdn.net/my

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/297293
推荐阅读
相关标签
  

闽ICP备14008679号