本页内容

QMovie Class

QMovie 类是一个用于通过 `QImageReader` 播放视频的便捷类。更多内容...

头文件: #include <QMovie>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
继承自: QObject

公共类型

enum CacheMode { CacheNone, CacheAll }
enum MovieState { NotRunning, Paused, Running }

属性

公共函数

QMovie(QObject *parent = nullptr)
QMovie(QIODevice *device, const QByteArray &format = QByteArray(), QObject *parent = nullptr)
QMovie(const QString &fileName, const QByteArray &format = QByteArray(), QObject *parent = nullptr)
virtual ~QMovie()
QColor backgroundColor() const
QBindable<QMovie::CacheMode> bindableCacheMode()
QBindable<int> bindableSpeed()
QMovie::CacheMode cacheMode() const
int currentFrameNumber() const
QImage currentImage() const
QPixmap currentPixmap() const
QIODevice *device() const
QString fileName() const
QByteArray format() const
int frameCount() const
QRect frameRect() const
bool isValid() const
bool jumpToFrame(int frameNumber)
QImageReader::ImageReaderError lastError() const
QString lastErrorString() const
int loopCount() const
int nextFrameDelay() const
QSize scaledSize()
void setBackgroundColor(const QColor &color)
void setCacheMode(QMovie::CacheMode mode)
void setDevice(QIODevice *device)
void setFileName(const QString &fileName)
void setFormat(const QByteArray &format)
void setScaledSize(const QSize &size)
int speed() const
QMovie::MovieState state() const

公共槽位

bool jumpToNextFrame()
void setPaused(bool paused)
void setSpeed(int percentSpeed)
void start()
void stop()

信号

void error(QImageReader::ImageReaderError error)
void finished()
void frameChanged(int frameNumber)
void resized(const QSize &size)
void started()
void stateChanged(QMovie::MovieState state)
void updated(const QRect &rect)

静态公共成员

QList<QByteArray> supportedFormats()

详细说明

该类用于显示没有声音的简单动画。

首先,通过向 QMovie 的构造函数传递文件名或指向包含动画图像格式的QIODevice 的指针,来创建一个 QMovie 对象。在开始播放电影之前,可以调用isValid() 来检查图像数据是否有效。 要开始播放影片,请调用start()。QMovie将进入Running 状态,并触发started()和stateChanged()事件。要获取影片的当前状态,请调用state()。

要在应用程序中显示影片,可将 QMovie 对象传递给QLabel::setMovie()。示例:

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

label.setMovie(movie);
movie->start();

每当影片中有新帧可用时,QMovie 会触发updated() 事件。如果帧的大小发生变化,则会触发resized() 事件。 您可以调用currentImage() 或currentPixmap() 来获取当前帧的副本。当视频播放完毕时,QMovie 会发出finished() 信号。如果播放过程中发生任何错误(例如,图像文件损坏),QMovie 将发出error() 信号。

您可以通过调用setSpeed()来控制影片的播放速度,该函数将原始速度的百分比作为参数。 调用setPaused(true) 可暂停影片。此时 QMovie 将进入Paused 状态并发出stateChanged() 事件。若调用setPaused(false),QMovie 将重新进入Running 状态并继续播放影片。要停止影片,请调用stop()。

某些动画格式允许您设置背景色。您可以调用setBackgroundColor()来设置颜色,或调用backgroundColor()来获取当前的背景色。

currentFrameNumber() 返回当前帧的序列号。动画中的第一帧序列号为 0。若图像格式支持此功能,frameCount() 将返回动画中的总帧数。 您可以调用loopCount() 获取影片在结束前应循环播放的次数。nextFrameDelay() 返回当前帧应显示的毫秒数。

可以通过调用setCacheMode()来指示QMovie缓存动画的帧。

调用supportedFormats() 可获取 QMovie 支持的格式列表。

另请参阅 QLabel 和QImageReader 。

成员类型文档

enum QMovie::CacheMode

此枚举描述了QMovie 的不同缓存模式。

常量值描述
QMovie::CacheNone0不缓存任何帧(默认)。
QMovie::CacheAll1缓存所有帧。

enum QMovie::MovieState

此枚举描述了QMovie 的各种状态。

常量值描述
QMovie::NotRunning0影片未播放。这是 `QMovie` 的初始状态,也是在调用 `stop()` 或影片播放完毕后进入的状态。
QMovie::Paused1电影已暂停,QMovie 停止发出updated() 或resized()。调用 pause() 或setPaused(true) 后,电影将进入此状态。当前帧号会被保存,当调用 unpause() 或setPaused(false) 时,电影将从下一帧继续播放。
QMovie::Running2影片正在播放。

属性文档

[bindable] cacheMode : CacheMode

注意:此 属性支持QProperty 绑定。

该属性用于指定影片的缓存模式

当QMovie 所依赖的底层动画格式处理程序不支持跳转到动画中的特定帧,甚至不支持将动画“倒带”到开头(用于循环播放)时,缓存帧会非常有用。 此外,如果图像数据来自顺序设备,底层动画处理程序将无法回溯到数据已被读取的帧(这使得循环播放完全不可能)。

为了应对此类情况,可以指示QMovie 对象缓存帧,但代价是需要在对象的生命周期内将帧保存在内存中,从而增加内存开销。

默认情况下,此属性设置为CacheNone 。

访问函数:

QMovie::CacheMode cacheMode() const
void setCacheMode(QMovie::CacheMode mode)

另请参阅 QMovie::CacheMode 。

[bindable] speed : int

注意:此 属性支持QProperty 绑定。

该属性用于控制影片的播放速度

速度以原始视频速度的百分比为单位。默认速度为100%。示例:

QMovie movie("racecar.gif");
movie.setSpeed(200); // 2x speed

访问函数:

int speed() const
void setSpeed(int percentSpeed)

成员函数文档

[explicit] QMovie::QMovie(QObject *parent = nullptr)

创建一个 QMovie 对象,并将parent 对象传递给QObject 的构造函数。

另请参阅 setFileName()、setDevice(),以及setFormat()。

[explicit] QMovie::QMovie(QIODevice *device, const QByteArray &format = QByteArray(), QObject *parent = nullptr)

创建一个 QMovie 对象。QMovie 将从 `device` 读取图像数据,并假设该文件已打开且可读。如果 `format ` 不为空,QMovie 将使用图像格式 `format ` 来解码图像数据。否则,QMovie 将尝试猜测该格式。

parent 对象会被传递给QObject 的构造函数。

[explicit] QMovie::QMovie(const QString &fileName, const QByteArray &format = QByteArray(), QObject *parent = nullptr)

创建一个 QMovie 对象。QMovie 将使用fileName 中的图像数据。如果format 不为空,QMovie 将使用图像格式format 来解码图像数据。否则,QMovie 将尝试猜测格式。

parent 对象将被传递给QObject 的构造函数。

[virtual noexcept] QMovie::~QMovie()

销毁QMovie 对象。

QColor QMovie::backgroundColor() const

返回电影的背景颜色。如果未指定背景颜色,则返回一个无效的QColor 。

另请参阅 setBackgroundColor()。

int QMovie::currentFrameNumber() const

返回当前帧的序号。影片中第一帧的序号为 0。

QImage QMovie::currentImage() const

将当前帧作为QImage 返回。

另请参见 currentPixmap() 和updated()。

QPixmap QMovie::currentPixmap() const

将当前帧作为QPixmap 返回。

另请参见 currentImage() 和updated()。

QIODevice *QMovie::device() const

返回QMovie 读取图像数据的设备。如果当前尚未分配任何设备,则返回nullptr 。

另请参阅 setDevice() 和fileName()。

[signal] void QMovie::error(QImageReader::ImageReaderError error)

当播放过程中发生error 错误时,QMovie 会发出此信号。QMovie 将停止影片播放,并进入QMovie::NotRunning 状态。

另请参阅 lastError() 和lastErrorString()。

QString QMovie::fileName() const

返回QMovie 用于读取图像数据的文件名。如果未指定文件名,或者指定的设备不是文件,则返回一个空的QString 。

另请参阅 setFileName() 和device()。

[signal] void QMovie::finished()

当影片播放完毕时,会发出此信号。

另请参阅 QMovie::stop()。

QByteArray QMovie::format() const

返回QMovie 在解码图像数据时使用的格式。如果未指定任何格式,则返回一个空的QByteArray()。

另请参阅 setFormat()。

[signal] void QMovie::frameChanged(int frameNumber)

当帧号变为frameNumber 时,会发出此信号。您可以调用currentImage()或currentPixmap()来获取该帧的副本。

int QMovie::frameCount() const

返回影片中的帧数。

某些动画格式不支持此功能,此时将返回 0。

QRect QMovie::frameRect() const

返回最后一帧的矩形。如果尚未更新任何帧,则返回一个无效的QRect 。

另请参阅 currentImage() 和currentPixmap()。

bool QMovie::isValid() const

如果电影有效(例如,图像数据可读且图像格式受支持),则返回true ;否则返回false 。

有关影片无效的原因,请参阅lastError()。

bool QMovie::jumpToFrame(int frameNumber)

跳转到帧号frameNumber 。成功时返回true ;否则返回false 。

[slot] bool QMovie::jumpToNextFrame()

跳转到下一帧。成功时返回true ;否则返回false 。

QImageReader::ImageReaderError QMovie::lastError() const

返回在尝试读取图像数据时发生的最新错误。

另请参阅 lastErrorString()。

QString QMovie::lastErrorString() const

返回在尝试读取图像数据时发生的最近一次错误的人类可读表示形式。

另请参阅 lastError()。

int QMovie::loopCount() const

返回视频在结束前将循环播放的次数。如果视频仅播放一次(不循环),则 loopCount 返回 0;如果视频无限循环,则 loopCount 返回 -1。

请注意,如果图像数据来自顺序设备(例如套接字),则只有当 `cacheMode ` 设置为 `QMovie::CacheAll` 时,`QMovie ` 才能循环播放该视频。

int QMovie::nextFrameDelay() const

返回QMovie 在更新动画的下一帧之前将等待的毫秒数。

[signal] void QMovie::resized(const QSize &size)

当当前帧被调整为size 大小时,会发出此信号。在动画中,此效果有时会被用作替换帧的替代方案。您可以调用currentImage()或currentPixmap()来获取更新后帧的副本。

QSize QMovie::scaledSize()

返回帧的缩放后尺寸。

另请参阅 setScaledSize() 和QImageReader::scaledSize()。

void QMovie::setBackgroundColor(const QColor &color)

对于支持此功能的图像格式,该函数将背景色设置为color 。

另请参阅 backgroundColor()。

void QMovie::setDevice(QIODevice *device)

将当前设备设置为device 。当影片播放时,QMovie 将从该设备读取图像数据。

另请参阅 device() 和setFormat()。

void QMovie::setFileName(const QString &fileName)

将QMovie 读取图像数据的文件名设置为fileName 。

另请参阅 fileName()、setDevice(),以及setFormat()。

void QMovie::setFormat(const QByteArray &format)

将QMovie 在解码图像数据时使用的格式设置为format 。默认情况下,QMovie 会尝试推测图像数据的格式。

您可以调用supportedFormats() 以获取QMovie 支持的所有格式列表。

另请参阅 format() 和QImageReader::supportedImageFormats()。

[slot] void QMovie::setPaused(bool paused)

如果paused 为真,QMovie 将进入Paused 状态并发出stateChanged (暂停);否则,它将进入Running 状态并发出stateChanged (运行)。

另请参阅 state()。

void QMovie::setScaledSize(const QSize &size)

将缩放后的帧大小设置为size 。

另请参阅 scaledSize() 和QImageReader::setScaledSize()。

[slot] void QMovie::start()

开始播放影片。QMovie 将进入Running 状态,并随着影片的播放,开始发出updated()和resized()信号。

如果QMovie 处于Paused 状态,则此函数等同于调用setPaused(false)。如果QMovie 已经处于Running 状态,则此函数不执行任何操作。

另请参阅 stop() 和setPaused()。

[signal] void QMovie::started()

在调用QMovie::start()后,当QMovie 进入QMovie::Running 状态时,会发出此信号。

QMovie::MovieState QMovie::state() const

返回QMovie 的当前状态。

另请参阅 MovieState 和stateChanged()。

[signal] void QMovie::stateChanged(QMovie::MovieState state)

每当电影的状态发生变化时,都会发出此信号。新状态由state 指定。

另请参阅 QMovie::state()。

[slot] void QMovie::stop()

停止影片播放。QMovie 将进入NotRunning 状态,并停止发出updated()和resized()信号。如果再次调用start(),影片将从头开始重新播放。

如果QMovie 已经处于NotRunning 状态,则此函数不执行任何操作。

另请参阅 start() 和setPaused()。

[static] QList<QByteArray> QMovie::supportedFormats()

返回QMovie 支持的图像格式列表。

另请参阅 QImageReader::supportedImageFormats()。

[signal] void QMovie::updated(const QRect &rect)

当当前帧中的矩形rect 被更新时,会发出此信号。您可以调用currentImage()或currentPixmap()来获取更新后帧的副本。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.