qt label显示图片_qt关于qmovie类的使用
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类的使用相关推荐
- qt label显示图片_Qt官方示例-QML Axes
QML轴线图示例,折线图,散点图. 使用相同轴坐标的折线图和散点图. 代码: ChartView {title: "Two Series, Common Axes"anchors. ...
- qt label显示文字_Qt官方示例共享内存
这个例子展示了如何使用QSharedMemory类(共享内存)进行进程间通信. 构建示例,请运行make.要运行该示例,请运行两个实例.main()函数创建一个应用程序和我们示例的Dialog类的 ...
- VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放、移动图片
VS+Qt应用开发-Qt+Halcon显示图片,实现鼠标缩放.移动图片 效果展示 界面设计 代码例程 完整代码 CMyLabel.h CMyLabel.cpp BrowsePic.h BrowsePi ...
- qt无法显示图片的原因
qt无法显示图片: 原因: 1.检查图片路径,将图片路径改为全路径 如图片路径单为./jpg时,找不到图片,为全路径时可以找到 2.检查图片格式,不要乱改图片的后缀(如1.jpg改成1.png),否则 ...
- python label 显示图片
python label 显示图片
- qt显示html富文本图片,Qt QLabel显示图片 动画 富文本
0 前言动画 QLabel 功能不少, 能够用来显示图片 动画 富文本this 1 效果.net 对于图片和动画, 先添加到资源文件再使用3d 右键 Resources -> 添加现有文件cod ...
- qt 启动画面显示图片_Qt程序起动画面QSplashScreen
Qt程序启动画面QSplashScreen QSplashScreen会在应用程序的主窗口出现之前显示一个图片! #include "qmain.h" #include #incl ...
- python label显示图片_高大上的YOLOV3对象检测算法,使用python也可轻松实现
继续我们的目标检测算法的分享,前期我们介绍了SSD目标检测算法的python实现以及Faster-RCNN目标检测算法的python实现以及yolo目标检测算法的darknet的window环境安装, ...
- pyqt使用label显示图片
1.利用Qt designer设计一个简单的界面,如下: 2.将ui文件转为py文件,我命名为pic.py. 我是在pycharm进行转换的,点击保存的ui文件右键,找到external tools选 ...
最新文章
- 详解Asp.net MVC DropDownLists
- sc修改服务器,华为sc服务器配置方法
- Redis的内存消耗
- Vue中使用el-tag标签实现输入多个字符串实现新增和修改回显(字符数组拼接和拆分)
- PaperWeekly给您拜年啦!
- CC.Net 全接触系列之二: CCRC.Net : CC.Net 的一种另类使用方式
- java 绘制sin函数图像_MATLAB基础学习之三维曲线的绘制
- 三星Galaxy A90 5G版通过认证:有望成为最便宜的5G手机
- Google 产品速查手册大全
- Axure动态面板设置 2020-11-06
- 极限编程和极限编程方法采用的有效的开发实践
- rss阅读器Reeder 5 for Mac
- 16/10/2019 一步步学会分析ATAC-seq
- 黑苹果主机z77技嘉wifi主板,
- PowerManger
- 读书杂抄之《挪威的森林》
- 企业证书打包ipa文件(图文详解)
- 编程(代码、软件)规范(适用嵌入式、单片机、上位机等)
- win10计算机右键属性打不开,右键电脑属性打不开|解决win10系统我的电脑属性打不开...
- Kaggle 新赛 | GoDaddy 小微企业密度预测
热门文章
- linux透明大页内存,rhel7.2 禁用透明的大页内存--transparent_hugepage(THP)
- 医院病案档案管理系统php_医疗产品经理必懂:医院业务流程及系统
- 明日之后怎么跳过实名认证_明日之后新手教程能不能跳过 明日之后新手教程玩法介绍...
- oracle+测试权限,Oracle测试题
- python test suit_python unittest学习3---添加测试套件,testsuit
- linux sock结构体,struct socket结构体详解
- python教程:深拷贝与浅拷贝的具体区别在哪里
- python中基本类型的连接组合和互相转换
- java调用spark_spark中的并行方法调用以及传递方法中使用spark会话
- C语言中的隐式声明是什么,有什么危害?warning: implicit declaration of function ‘xxx’