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

1472e4bea18486d221c98c6956482380.png

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

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

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

QLabel label;

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

label.setMovie(movie);

movie->start();

实例:

运行效果:

d8d3c32db9c4aed7c86e32b86ad3d5fe.png

主要代码:

(基类为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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值