QMovie类

QMovie类是一个方便的类,用于使用QImageReader播放电影。[更多...

头文件 #include <QMovie>
CMakefind_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmakeQT += gui
继承 QObject

公共类型

枚举CacheMode { CacheNone, CacheAll }
枚举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)
~QMovie()
QColorbackgroundColor() const
QBindable<QMovie::CacheMode>bindableCacheMode()
QBindable<int>bindableSpeed()
QMovie::CacheModecacheMode() const
intcurrentFrameNumber() const
QImagecurrentImage() const
QPixmapcurrentPixmap() const
QIODevice *device() const
QStringfileName() const
QByteArrayformat() const
intframeCount() const
QRectframeRect() const
boolisValid() const
booljumpToFrame(int frameNumber)
QImageReader::ImageReaderErrorlastError() const
QStringlastErrorString() const
intloopCount() const
intnextFrameDelay() const
QSizescaledSize()
voidsetBackgroundColor(const QColor &color)
voidsetCacheMode(QMovie::CacheMode mode)
voidsetDevice(QIODevice *device)
voidsetFileName(const QString &fileName)
voidsetFormat(const QByteArray &format)
voidsetScaledSize(const QSize &size)
intspeed() const
QMovie::MovieStatestate() const

公共槽

booljumpToNextFrame()
voidsetPaused(bool paused)
voidsetSpeed(int percentSpeed)
voidstart()
voidstop()

信号

voiderror(QImageReader::ImageReaderError error)
voidfinished()
voidframeChanged(int frameNumber)
voidresized(const QSize &size)
voidstarted()
voidstateChanged(QMovie::MovieState state)
voidupdated(const QRect &rect)

静态公共成员

QList<QByteArray>supportedFormats()

详细描述

此类用于显示不带声音的简单动画。

首先,通过传递文件名或包含动画图像格式的QIODevice指针到QMovie构造函数,创建一个QMovie对象。在开始电影之前,您可以调用isValid()来检查图像数据是否有效。要开始电影,请调用start()。QMovie将进入运行状态,并发出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将进入暂停状态并发出stateChanged()。如果您调用setPaused(false),QMovie将重新进入运行状态并再次开始电影。要停止电影,请调用stop()。

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

currentFrameNumber()返回当前帧的序列号。动画中的第一帧序列号为0。frameCount()返回动画中的总帧数,如果图像格式支持此功能。您可以通过调用loopCount()来获取电影应该在完成前循环的次数。nextFrameDelay()返回当前帧应显示的毫秒数。

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

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

参见QLabelQImageReader

成员类型文档

枚举QMovie::CacheMode

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

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

枚举QMovie::MovieState

此枚举描述了QMovie的不同状态。

常量描述
QMovie::NotRunning0电影未运行。这是QMovie的初始状态,并且在调用stop()后或电影结束时进入此状态。
QMovie::Paused1电影已暂停,QMovie停止发出updated()或resized()。调用pause()或setPaused(true)后进入此状态。当前帧号被保留,当调用unpause()或setPaused(false)时,电影将继续下一帧。
QMovie::Running2电影正在运行。

属性文档

[可绑定] cacheMode : CacheMode

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

此属性包含电影的缓存模式

当底层动画格式处理器不支持直接跳转到动画中的特定帧或“回滚”到动画开头(用于循环)时,缓存帧可能会很有用。此外,如果图像数据来自顺序设备,底层动画处理器无法回溯到已读取数据的帧,这使得循环变得完全不可能。

为了帮助这种情况,可以指导QMovie对象缓存帧,这会在对象的生命周期内以保留帧在内存中的额外内存成本。

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

参见QMovie::CacheMode

[可绑定] speed : int

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

此属性包含电影的速率

速度以原始电影速度的百分比表示。默认速度是100%。示例

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

成员函数文档

[显式构造函数] QMovie::QMovie(QObject *parent = nullptr)

构造一个QMovie对象,将父对象传递给QObject构造函数。

参见setFileName()、setDevice()和setFormat()。

[显式构造函数] QMovie::QMovie(QIODevice *device,const QByteArray &format = QByteArray(),QObject *parent = nullptr)

构建一个QMovie对象。QMovie将从设备中读取图像数据,它假设该设备是打开且可读的。如果格式不为空,QMovie将使用图像格式格式解码图像数据。否则,QMovie将尝试猜测格式。

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

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

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

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

[虚函数 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

[信号] void QMovie::error(QImageReader::ImageReaderError error)

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

另请参阅lastError() 和 lastErrorString

QString QMovie::fileName() const

返回QMovie从其中读取图像数据的文件名。如果没有分配文件名,或者分配的设备不是文件,则返回一个空的QString

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

[信号] void QMovie::finished()

当电影播放完成时发出此信号。

另请参阅 QMovie::stop

QByteArray QMovie::format() const

返回QMovie解码图像数据时使用的格式。如果没有分配格式,则返回空的QByteArray()。

另请参阅 setFormat

[信号] void QMovie::frameChanged(int frameNumber)

当帧号变为frameNumber时发出此信号。您可以调用currentImagecurrentPixmap来获取帧的副本。

int QMovie::frameCount() const

返回电影中的帧数。

某些动画格式不支持此功能,在这种情况下返回0。

QRect QMovie::frameRect() const

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

另请参阅 currentImagecurrentPixmap

bool QMovie::isValid() const

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

有关电影为何无效的信息,请参阅lastError

bool QMovie::jumpToFrame(int frameNumber)

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

[槽] 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在更新动画中的下一帧之前将等待的毫秒数。

[信号] 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)

将当前设备设置为deviceQMovie将在电影运行时从这个设备读取图像数据。

另请参阅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

[槽函数] void QMovie::setPaused(bool paused)

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

另请参阅状态()。

void QMovie::setScaledSize(const QSize &size)

设置缩放帧大小为大小

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

[slot] void QMovie::start()

开始播放电影。 QMovie将进入运行状态,并在电影播放过程中开始发出updated()和resized()。

如果QMovie处于暂停状态,此函数等同于调用setPaused(false)。如果QMovie已经是运行状态,则此函数什么都不做。

另请参阅stop()和setPaused

[signal] void QMovie::started()

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

QMovie::MovieState QMovie::state() const

返回QMovie的当前状态。

另请参阅MovieStatestateChanged

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

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

另请参阅QMovie::state

[slot] void QMovie::stop()

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

如果QMovie已经是NotRunning状态,则此函数不做什么。

另请参阅start()和setPaused

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

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

参见QImageReader::supportedImageFormats

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

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

© 2024 The Qt Company Ltd. 本文档中的文档贡献归各自所有者所有。本文档依据自由软件基金会公布的 GNU自由文档许可证版本1.3 条款进行许可。Qt及其相应标志是芬兰及 worldwide countries 的 The Qt Company Ltd. 的商标。所有其他商标均归各自所有者所有。