在 Qt 中移动图像(作为动画)的简单示例?

     2023-02-17     49

关键词:

【中文标题】在 Qt 中移动图像(作为动画)的简单示例?【英文标题】:Simple example of moving an image (as an animation) in Qt? 【发布时间】:2021-11-01 01:24:27 【问题描述】:

我想在 Qt 中加载一个图像,并在动画中沿 x 轴移动它。

就是这样。我四处搜索,但大多数示例都远比这复杂得多,或者使用利用 Qt 绘图功能的几何形状。

这里有没有人有一个示例的链接,该示例只涵盖了我的简单用例?

【问题讨论】:

查看doc.qt.io/qt-5/qpropertyanimation.html,它给出了一个简单的例子。在您的情况下,您希望为x 属性而不是geometry 设置动画。 doc.qt.io/qt-5/qwidget.html#properties 谢谢,看起来方向正确。该示例使用“mywidget”。如果是图像,我会为该小部件使用什么类型?图像?我是 Qt 的绝对初学者。 答案取决于您使用图像的方式。例如,如果图像只是 UI 转换的一部分,则将其加载到 QPixmap 中可能是有意义的,然后将其设置在 QLabel 上并为标签设置动画。如果您设想一个包含多个运动图像的更复杂的场景,您可以查看 QGraphicsScene。你能更具体地介绍一下上下文吗? 我先用一张图来测试一下。 QLabel 会做我猜。谢谢。 【参考方案1】:

使用QTimer 实现非常简单。

结果是:

所以我的代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QTimer>
#include <QImage>
#include <QGraphicsEllipseItem>
#include <QVBoxLayout>
#include <QLabel>

class SimpleAnimation : public QWidget

    Q_OBJECT

public:
    SimpleAnimation(QWidget *parent = nullptr)
        : QWidget(parent)
    
        QPixmap image(":/0_0.png");
        m_label = new QLabel(this);
        m_label->setPixmap(image);

        QVBoxLayout* mainLayout = new QVBoxLayout;
        mainLayout->addWidget(m_label);

        setLayout(mainLayout);
        m_timer = new QTimer(this);
        connect(m_timer, &QTimer::timeout, this, &SimpleAnimation::onTimeout);
        m_timer->start(100);

    
    ~SimpleAnimation()
    
    

protected slots:
    void onTimeout()
    
        QPoint oldPosition = m_label->pos();
        QPoint newPosition = QPoint(oldPosition.x() + 10, oldPosition.y());

        m_label->move(newPosition);
    

private:
    QLabel* m_label;
    QTimer* m_timer;

;
#endif // MAINWINDOW_H

当超时信号发出时,我们得到QLabel的位置,将x加10,然后将我们的QLabel移动到新的位置。

当然,您可以将QGraphicsScene 用于图像。更适合管理大量 2D 对象。 QGraphicsScene 设置为 QGraphicsView,但对于一张图像,则不需要。

【讨论】:

小心,你的班级SimpleAnimation内存不安全! 我将这些连接:connect(m_timer, &amp;QObject::destroyed, this, &amp;SimpleAnimation::timerDelete);connect(m_label, &amp;QObject::destroyed, this, &amp;SimpleAnimation::timerDelete); connect(mainLayout, &amp;QObject::destroyed, this, &amp;SimpleAnimation::timerDelete); 添加到我的构造函数和void timerDelete() qDebug()&lt;&lt; "timerDelete"; 插槽以检查它是否删除。它返回我timerDelete 三次。所以我所有的对象都被破坏了,它没有内存泄漏 我不知道connect 做了什么,但如果你能处理它,那好吧!虽然,我认为您实现该类的方式很棘手,并且将来可能很难被其他人甚至您自己重用! @АндреасХаджигеоргиу 感谢您的建议,您是对的,但我正在制作一个简单的示例,初学者可以在 IDE 中复制并查看结果。在生产项目中,程序员自然会做出更好的设计 是的,不用担心我理解你的意图!另外,我只是想指出在他们的程序中不小心复制此类可能会引入的潜在内存泄漏。为了让文章更简洁!!!

如何使用 Flare 动画作为带有淡入动画的图像占位符

】如何使用Flare动画作为带有淡入动画的图像占位符【英文标题】:HowtoUseFlareAnimationasImagePlaceholderwithFade-InAnimation【发布时间】:2020-10-1918:27:45【问题描述】:我试图在从网络加载图像时显示图像占位符,并将占位符替换为带有... 查看详情

在python中使用opencv制作简单图像动画(代码片段)

...f0c;在一个飞扬的小鸟游戏中,为了让小鸟看起来向前移动,背景需要向后移动。为了理解这一点,让我们首先考虑一个线性Python列表。考虑一下下面的代码。a=['-','-','-',1,'-','-','-&#... 查看详情

在python中使用opencv制作简单图像动画(代码片段)

...f0c;在一个飞扬的小鸟游戏中,为了让小鸟看起来向前移动,背景需要向后移动。为了理解这一点,让我们首先考虑一个线性Python列表。考虑一下下面的代码。a=['-','-','-',1,'-','-','-&#... 查看详情

在 Qt 中显示图像以适应标签大小

】在Qt中显示图像以适应标签大小【英文标题】:DisplayimageinQttofitlabelsize【发布时间】:2011-08-0422:01:29【问题描述】:我已经尝试了几种在表单上显示图像的方法,但没有一种方法能达到我想要的效果。我读过很多地方,最简单... 查看详情

python之game笔记(3):pygame简单动画的实现

...来。  计算机动画实际上就是把图像从一个地方移动到另一个地方,同时几个连接动作交待显示就会产生逼真的效果。  因此,在做动画中,最基本要考虑的因素主要是三个,  一是时间,什么时间移动... 查看详情

在 UIView 中动画图像

...三到四个相当复杂的图形对象,并以精确的速度在视图中移动它们。我使用CADisplayLink来计算每个新帧这些对象应该移动多少。我的帧速率不是很好,所以我想我会尝试通过以编程方式创建UIImage来缓 查看详情

在核心动画中,红框代替 UIImage 视图移动

】在核心动画中,红框代替UIImage视图移动【英文标题】:RedBoxMovinginPlaceofUIImageViewinCoreAnimation【发布时间】:2013-02-1101:56:16【问题描述】:我的第一个核心动画只是一个从a点移动到b点的图像。由于某种原因,当动画被调用时,... 查看详情

尝试在 Qt Creator 中绘制,使用对象作为输入

...在的点,并使用计时器更新该点的位置,以便稍后它可以移动。我的代码目前只显示(0,0)处的点,我不知道为什么。我的mainwindow.cpp:#include"mainwind 查看详情

使用核心动画在屏幕上移动 UIImage

】使用核心动画在屏幕上移动UIImage【英文标题】:MoveUIImageacrossscreenusingcoreanimation【发布时间】:2013-02-1123:38:37【问题描述】:不要发布关于UIView动画的答案我了解UIView,我正在学习核心动画。我试图让图像向右移动50个单位,... 查看详情

java示例代码_在GXT 2.2网格中添加图像作为单元格的背景

java示例代码_在GXT 2.2网格中添加图像作为单元格的背景 查看详情

将图像作为数据 URI 存储在数据库 BLOB 中是否很糟糕?

...2013-10-1606:14:36【问题描述】:我正在创建一个查看文章的移动应用。这些文章只是简单的html,每个都有几个图像。我目前将所有内容都存储在数据库中。稍后,我需要以简单的格式将文章本地保存到设备 查看详情

如何在没有动画的目标c中无限移动iphone模拟器自身边界中的简单视图?

】如何在没有动画的目标c中无限移动iphone模拟器自身边界中的简单视图?【英文标题】:howtomovesimpleviewinselfboundaryofsimulatorofiphoneinfinitelywithoutanimationinobjectivec?【发布时间】:2014-03-2005:08:46【问题描述】:我想将我的UIView大小为(... 查看详情

java示例代码_在java中使用动画gif文件作为启动屏幕

java示例代码_在java中使用动画gif文件作为启动屏幕 查看详情

css简单动画

    这几天公司需要更新一个移动端web的页面,因为任务简单,就交给作为菜鸟新人的我来做。第一次接触css还是在14年刚上大一的时候跟着html一起学习的,之后就再也没有接触过。所以只好一边学习,一边完成任... 查看详情

在 qt 中使用 2 个图像编写仪表小部件

】在qt中使用2个图像编写仪表小部件【英文标题】:writingagaugewidgetusing2imagesinqt【发布时间】:2018-03-0812:34:50【问题描述】:我正在使用QT编写一个仪表小部件,它由2个单独的图像构成,一个作为背景,另一个作为Needle。我重新... 查看详情

在android中循环图像帧

...5-2018:00:26【问题描述】:我想做一个动画,一个从右到左移动的波浪。我做了一个波浪的图像,它的开始与结束重合我想做一个波浪移动的动画,animationlist我需要超过400帧,并且应用程序的大小会增长...我需要一种方法来将这... 查看详情

Action Script 3. 角色移动时改变动画

】ActionScript3.角色移动时改变动画【英文标题】:ActionScript3.Changeanimationswhencharactermoving【发布时间】:2013-09-2317:12:35【问题描述】:我正在创建简单的Flash游戏。我需要在角色移动时更改动画。例如,在前进、奔跑、跳跃、攻击... 查看详情

如何在qt中显示闪烁的[动画]红色/绿色状态图标

...绿色图标。谁能告诉我如何显示它。【问题讨论】:显示图像的 查看详情