我一直在玩QMovie尝试镜像电影以及反向播放。 对于镜像位,我尝试指定负宽度无济于事。由于QImage确实为此提供了设施,我希望QMovie也可以这样做。 对于那些事情,QMovie对象中似乎没有任何设施,所以我想知道我是否可以操纵QIODevice到QMovie对象而不是实现此目的,但是这对我来说是一个全新的领域,我没有在文档中看到任何可以实现镜像或反向播放的内容。 开始的代码示例与PySide页面上的代码示例相同:
label = QLabel()
movie = QMovie("animations/fire.gif")
label.setMovie(movie)
movie.start()
非常感谢任何想法。
谢谢, 弗兰克
答案 0 :(得分:2)
QMovie
没有提供设置当前图片的方法,因此您必须直接使用QImageReader
反向播放(使用QImageReader::jumpToImage()
)。这不是很容易,因为一帧和下一帧之间的延迟可能会发生变化,但是你可以调用它QImageReader::nextImageDelay()
。
要显示影片,您可以实现自己的小部件以根据需要绘制影片。
在paintEvent()
中,您可以设置转换为画家以获得镜像效果,然后绘制电影的当前图像。
示例:
void MyWidget::paintEvent(QPaintEvent * event)
{
QPainter painter(this);
painter.scale(-1, 1); // x-axis mirror
//here maybe you must adjust the transformation to center and scale the movie.
painter.drawImage(0, 0, currentImage);
}
要播放电影,您必须设置一个更改当前图像的计时器。
示例:
//you must create a timer in the constructor and connect it to this slot
void MyWidget::timeoutSlot()
{
int currentImageIndex;
//here you have to compute the image index
imageReader.jumpToImage(currentImageIndex);
currentImage = imageReader.read(); //maybe you want to read it only if the index is changed
update();
}
Here你可以找到一个小部件子类的例子,带有计时器和画家转换