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() 返回当前帧的序列号。如果图像格式支持序列号,frameCount() 会返回动画的总帧数。您可以调用loopCount() 来获取动画在结束前的循环次数。nextFrameDelay() 返回当前帧应显示的毫秒数。
调用setCacheMode() 可指示 QMovie 缓存动画帧。
调用supportedFormats() 查看 QMovie 支持的格式列表。
另请参阅 QLabel 和QImageReader 。
成员类型文档
enum QMovie::CacheMode
该枚举描述了QMovie 的不同缓存模式。
常量 | 值 | 描述 |
---|---|---|
QMovie::CacheNone | 0 | 不缓存帧(默认)。 |
QMovie::CacheAll | 1 | 缓存所有帧。 |
enum QMovie::MovieState
该枚举描述了QMovie 的不同状态。
属性文档
[bindable]
cacheMode : CacheMode
注: 此属性支持QProperty 绑定。
此属性保存影片的缓存模式
当QMovie 用来解码动画数据的底层动画格式处理程序不支持跳转到动画中的特定帧,甚至不支持将动画 "倒带 "到开头(用于循环)时,缓存帧就非常有用。此外,如果图像数据来自顺序设备,底层动画处理程序就不可能回溯到数据已被读取的帧上(导致循环完全不可能)。
在这种情况下,可以指示QMovie 对象缓存帧,但需要在对象的整个生命周期内将帧保存在内存中,从而增加内存成本。
默认情况下,此属性设置为CacheNone 。
另请参阅 QMovie::CacheMode 。
[bindable]
speed : int
注: 此属性支持QProperty 绑定。
此属性保存影片的速度
速度以原始影片速度的百分比来衡量。默认速度为 100%。举例说明
QMovie movie("racecar.gif"); movie.setSpeed(200); // 2x speed
成员函数文档
[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
。
[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。
请注意,如果图像数据来自顺序设备(如套接字),QMovie 只能在cacheMode 设置为QMovie::CacheAll 时循环播放影片。
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 将从该设备读取图像数据。
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 为 true,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 状态,则此函数不会执行任何操作。
[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 状态,则此函数不会执行任何操作。
[static]
QList<QByteArray> QMovie::supportedFormats()
返回QMovie 支持的图像格式列表。
另请参见 QImageReader::supportedImageFormats()。
[signal]
void QMovie::updated(const QRect &rect)
当当前帧中的矩形rect 已更新时,就会发出该信号。您可以调用currentImage() 或currentPixmap() 来获取更新帧的副本。
© 2025 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.