欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

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

发布时间:2025/3/19 编程问答 38 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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类的使用的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。