QMovie类用来显示简单的并且没有声音的动画,比如GIF格式的图片等。

如果你想要显示视频或者多媒体,可以使用Qt Multimedia 多媒体框架。

显示一个简单的动画,常用的方式如下:

QLabel label;

QMovie *movie = new QMovie("animations/fire.gif");

label.setMovie(movie);

movie->start();

实例:

运行效果:

主要代码:

(基类为QWidget)

1. movieplayer.h

/*movieplayer.h*/

#ifndef MOVIEPLAYER_H

#define MOVIEPLAYER_H

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

class QCheckBox;

class QGridLayout;

class QHBoxLayout;

class QLabel;

class QMovie;

class QSlider;

class QSpinBox;

class QToolButton;

class QVBoxLayout;

class MoviePlayer : public QWidget

{

Q_OBJECT

public:

MoviePlayer(QWidget *parent = 0);

void openFile(const QString &fileName);

private slots:

void open();

void goToFrame(int frame);

void fitToWindow();

void updateButtons();

void updateFrameSlider();

private:

void createControls();

void createButtons();

QString currentMovieDirectory;

QLabel *movieLabel;

QMovie *movie;

QToolButton *openButton;

QToolButton *playButton;

QToolButton *pauseButton;

QToolButton *stopButton;

QToolButton *quitButton;

QCheckBox *fitCheckBox;

QSlider *frameSlider;

QSpinBox *speedSpinBox;

QLabel *frameLabel;

QLabel *speedLabel;

QGridLayout *controlsLayout;

QHBoxLayout *buttonsLayout;

QVBoxLayout *mainLayout;

};

#endif

2. movieplayer.cpp

/*movieplayer.cpp*/

#include

#include

#include

#include

#include "movieplayer.h"

MoviePlayer::MoviePlayer(QWidget *parent)

: QWidget(parent)

{

movie = new QMovie(this);

movie->setCacheMode(QMovie::CacheAll);

movieLabel = new QLabel(tr("No movie loaded"));

movieLabel->setAlignment(Qt::AlignCenter);

movieLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);

movieLabel->setBackgroundRole(QPalette::Shadow);

movieLabel->setAutoFillBackground(true);

currentMovieDirectory = ".gif";

createControls();

createButtons();

connect(movie, SIGNAL(frameChanged(int)), this, SLOT(updateFrameSlider()));

connect(movie, SIGNAL(stateChanged(QMovie::MovieState)),

this, SLOT(updateButtons()));

connect(fitCheckBox, SIGNAL(clicked()), this, SLOT(fitToWindow()));

connect(frameSlider, SIGNAL(valueChanged(int)), this, SLOT(goToFrame(int)));

connect(speedSpinBox, SIGNAL(valueChanged(int)),

movie, SLOT(setSpeed(int)));

mainLayout = new QVBoxLayout;

mainLayout->addWidget(movieLabel);

mainLayout->addLayout(controlsLayout);

mainLayout->addLayout(buttonsLayout);

setLayout(mainLayout);

updateFrameSlider();

updateButtons();

setWindowTitle(tr("Movie Player"));

resize(400, 400);

}

void MoviePlayer::open()

{

QString fileName = QFileDialog::getOpenFileName(this, tr("Open a Movie"),

currentMovieDirectory);

if (!fileName.isEmpty())

openFile(fileName);

}

void MoviePlayer::openFile(const QString &fileName)

{

currentMovieDirectory = QFileInfo(fileName).path();

movie->stop();

movieLabel->setMovie(movie);

movie->setFileName(fileName);

movie->start();

updateFrameSlider();

updateButtons();

}

void MoviePlayer::goToFrame(int frame)

{

movie->jumpToFrame(frame);

}

void MoviePlayer::fitToWindow()

{

movieLabel->setScaledContents(fitCheckBox->isChecked());

}

void MoviePlayer::updateFrameSlider()

{

bool hasFrames = (movie->currentFrameNumber() >= 0);

if (hasFrames)

{

if (movie->frameCount() > 0)

{

frameSlider->setMaximum(movie->frameCount() - 1);

}

else

{

if (movie->currentFrameNumber() > frameSlider->maximum())

frameSlider->setMaximum(movie->currentFrameNumber());

}

frameSlider->setValue(movie->currentFrameNumber());

}

else

{

frameSlider->setMaximum(0);

}

frameLabel->setEnabled(hasFrames);

frameSlider->setEnabled(hasFrames);

}

void MoviePlayer::updateButtons()

{

playButton->setEnabled(movie->isValid() && movie->frameCount() != 1

&& movie->state() == QMovie::NotRunning);

pauseButton->setEnabled(movie->state() != QMovie::NotRunning);

pauseButton->setChecked(movie->state() == QMovie::Paused);

stopButton->setEnabled(movie->state() != QMovie::NotRunning);

}

void MoviePlayer::createControls()

{

fitCheckBox = new QCheckBox(tr("Fit to Window"));

frameLabel = new QLabel(tr("Current frame:"));

frameSlider = new QSlider(Qt::Horizontal);

frameSlider->setTickPosition(QSlider::TicksBelow);

frameSlider->setTickInterval(10);

speedLabel = new QLabel(tr("Speed:"));

speedSpinBox = new QSpinBox;

speedSpinBox->setRange(1, 9999);

speedSpinBox->setValue(100);

speedSpinBox->setSuffix(tr("%"));

controlsLayout = new QGridLayout; //格子布局

controlsLayout->addWidget(fitCheckBox, 0, 0, 1, 2);

controlsLayout->addWidget(frameLabel, 1, 0);

controlsLayout->addWidget(frameSlider, 1, 1, 1, 2);

controlsLayout->addWidget(speedLabel, 2, 0);

controlsLayout->addWidget(speedSpinBox, 2, 1);

}

void MoviePlayer::createButtons() //按钮水平布局

{

QSize iconSize(36, 36);

openButton = new QToolButton;

openButton->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton));

openButton->setIconSize(iconSize);

openButton->setToolTip(tr("Open File"));

connect(openButton, SIGNAL(clicked()), this, SLOT(open()));

playButton = new QToolButton;

playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));

playButton->setIconSize(iconSize);

playButton->setToolTip(tr("Play"));

connect(playButton, SIGNAL(clicked()), movie, SLOT(start()));

pauseButton = new QToolButton;

pauseButton->setCheckable(true);

pauseButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));

pauseButton->setIconSize(iconSize);

pauseButton->setToolTip(tr("Pause"));

connect(pauseButton, SIGNAL(clicked(bool)), movie, SLOT(setPaused(bool)));

stopButton = new QToolButton;

stopButton->setIcon(style()->standardIcon(QStyle::SP_MediaStop));

stopButton->setIconSize(iconSize);

stopButton->setToolTip(tr("Stop"));

connect(stopButton, SIGNAL(clicked()), movie, SLOT(stop()));

quitButton = new QToolButton;

quitButton->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton));

quitButton->setIconSize(iconSize);

quitButton->setToolTip(tr("Quit"));

connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));

buttonsLayout = new QHBoxLayout;

buttonsLayout->addStretch();

buttonsLayout->addWidget(openButton);

buttonsLayout->addWidget(playButton);

buttonsLayout->addWidget(pauseButton);

buttonsLayout->addWidget(stopButton);

buttonsLayout->addWidget(quitButton);

buttonsLayout->addStretch();

}

3. main.cpp

/*main.cpp*/

#include

#include "movieplayer.h"

int main(int argc, char *argv[])

{

QApplication app(argc, argv);

MoviePlayer player;

player.show();

return app.exec();

}

qt label显示图片_qt关于qmovie类的使用相关推荐

  1. qt label显示图片_Qt官方示例-QML Axes

    QML轴线图示例,折线图,散点图. 使用相同轴坐标的折线图和散点图. 代码: ChartView {title: "Two Series, Common Axes"anchors. ...

  2. qt label显示文字_Qt官方示例共享内存

    这个例子展示了如何使用QSharedMemory类(共享内存)进行进程间通信.   构建示例,请运行make.要运行该示例,请运行两个实例.main()函数创建一个应用程序和我们示例的Dialog类的 ...

  3. VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放、移动图片

    VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放.移动图片 效果展示 界面设计 代码例程 完整代码 CMyLabel.h CMyLabel.cpp BrowsePic.h BrowsePi ...

  4. qt无法显示图片的原因

    qt无法显示图片: 原因: 1.检查图片路径,将图片路径改为全路径 如图片路径单为./jpg时,找不到图片,为全路径时可以找到 2.检查图片格式,不要乱改图片的后缀(如1.jpg改成1.png),否则 ...

  5. python label 显示图片

    python label 显示图片

  6. qt显示html富文本图片,Qt QLabel显示图片 动画 富文本

    0 前言动画 QLabel 功能不少, 能够用来显示图片 动画 富文本this 1 效果.net 对于图片和动画, 先添加到资源文件再使用3d 右键 Resources -> 添加现有文件cod ...

  7. qt 启动画面显示图片_Qt程序起动画面QSplashScreen

    Qt程序启动画面QSplashScreen QSplashScreen会在应用程序的主窗口出现之前显示一个图片! #include "qmain.h" #include #incl ...

  8. python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现

    继续我们的目标检测算法的分享,前期我们介绍了SSD目标检测算法的python实现以及Faster-RCNN目标检测算法的python实现以及yolo目标检测算法的darknet的window环境安装, ...

  9. pyqt使用label显示图片

    1.利用Qt designer设计一个简单的界面,如下: 2.将ui文件转为py文件,我命名为pic.py. 我是在pycharm进行转换的,点击保存的ui文件右键,找到external tools选 ...

最新文章

  1. 详解Asp.net MVC DropDownLists
  2. sc修改服务器,华为sc服务器配置方法
  3. Redis的内存消耗
  4. Vue中使用el-tag标签实现输入多个字符串实现新增和修改回显(字符数组拼接和拆分)
  5. PaperWeekly给您拜年啦!
  6. CC.Net 全接触系列之二: CCRC.Net : CC.Net 的一种另类使用方式
  7. java 绘制sin函数图像_MATLAB基础学习之三维曲线的绘制
  8. 三星Galaxy A90 5G版通过认证:有望成为最便宜的5G手机
  9. Google 产品速查手册大全
  10. Axure动态面板设置 2020-11-06
  11. 极限编程和极限编程方法采用的有效的开发实践
  12. rss阅读器Reeder 5 for Mac
  13. 16/10/2019 一步步学会分析ATAC-seq
  14. 黑苹果主机z77技嘉wifi主板,
  15. PowerManger
  16. 读书杂抄之《挪威的森林》
  17. 企业证书打包ipa文件(图文详解)
  18. 编程(代码、软件)规范(适用嵌入式、单片机、上位机等)
  19. win10计算机右键属性打不开,右键电脑属性打不开|解决win10系统我的电脑属性打不开...
  20. Kaggle 新赛 | GoDaddy 小微企业密度预测

热门文章

  1. linux透明大页内存,rhel7.2 禁用透明的大页内存--transparent_hugepage(THP)
  2. 医院病案档案管理系统php_医疗产品经理必懂:医院业务流程及系统
  3. 明日之后怎么跳过实名认证_明日之后新手教程能不能跳过 明日之后新手教程玩法介绍...
  4. oracle+测试权限,Oracle测试题
  5. python test suit_python unittest学习3---添加测试套件,testsuit
  6. linux sock结构体,struct socket结构体详解
  7. python教程:深拷贝与浅拷贝的具体区别在哪里
  8. python中基本类型的连接组合和互相转换
  9. java调用spark_spark中的并行方法调用以及传递方法中使用spark会话
  10. C语言中的隐式声明是什么,有什么危害?warning: implicit declaration of function ‘xxx’