草庐IT

c++ - QGraphicsPixmapItem的Qt更新像素图

coder 2024-02-21 原文

我正在使用 QGraphicsPixmapItem 在显示器上显示图像。现在,我希望能够即时更新此图像,但我似乎遇到了一些问题。

这是文件:

class Enemy_View : public QGraphicsPixmapItem
{
public:
    Enemy_View(QGraphicsScene &myScene);
    void defeat();
private:
    QGraphicsScene &scene;
    QPixmap image;
}

这是cpp文件

Enemy_View::Enemy_View(QGraphicsScene &myScene):
    image{":/images/alive.png"}, scene(myScene)
{
    QGraphicsPixmapItem *enemyImage = scene.addPixmap(image.scaledToWidth(20));
    enemyImage->setPos(20, 20);
    this->defeat();
}

void Enemy_View::defeat(void)
{
    image.load(":/images/dead.png");
    this->setPixmap(image);
    this->update();
}

所以我的想法是我希望能够在我的对象上调用 defeat 方法,然后编辑一些属性并最终更改图像。但是,我现在所做的不起作用。 alive.png 图像会显示,但不会更新为 dead.png 图像。


更新1

正如 Marek R 所提到的,我似乎正在复制许多内置功能。我试图清理它,但现在现场再也没有任何东西出现。

.h文件

class Enemy_View : public QGraphicsPixmapItem
{
public:
    Enemy_View(QGraphicsScene &myScene);
    void defeat();

private:
    QGraphicsScene &scene;
    /* Extra vars */
};

.cpp 文件

Enemy_View::Enemy_View(QGraphicsScene &myScene):
    scene(myScene)
{
    /* This part would seem ideal but doesn't work */
    this->setPixmap(QPixmap(":/images/alive.png").scaledToWidth(10));
    this->setPos(10, 10);
    scene.addItem(this);

    /* This part does render the images */
    auto *thisEl = scene.addPixmap(QPixmap(":/images/Jackskellington.png").scaledToWidth(10));
    thisEl->setPos(10, 10);
    scene.addItem(this);

    this->defeat();
}

void Enemy_View::defeat(void)
{
    this->setPixmap(QPixmap(":/images/dead.png"));
}

所以我删除了QPixmap,但我不确定是否可以删除QGraphicsScene。在我的 cpp 文件中,您可以看到我现在有两个版本的构造函数。第一部分,使用 this 似乎是一个理想的解决方案,但不会在屏幕上显示图像(即使它编译没有错误)。带有 thisEl 的第二个版本确实呈现了它。我在第一个版本中做错了什么?

最佳答案

为什么 FGS 是 QGraphicsPixmapItem 的子类? QGraphicsPixmapItem 具有您需要的所有功能。您添加的那些新字段什么也不做,它们只会尝试复制已经存在的功能(但对于此实现,它什么也不做)。

这应该是这样的:

QPixmp image(":/images/alive.png");
QGraphicsPixmapItem *enemyItem = scene.addPixmap(image.scaledToWidth(20));
enemyItem->setPos(20, 20);

// and after something dies
QPixmap dieImage(":/images/dead.png");
enemyItem->setPixmap(dieImage);

关于c++ - QGraphicsPixmapItem的Qt更新像素图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27085166/

有关c++ - QGraphicsPixmapItem的Qt更新像素图的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  4. ruby-on-rails - 如何在 Rails Controller Action 上触发 Facebook 像素 - 2

    我有一个ruby​​onrails应用程序。我按照facebook的说明添加了一个像素。但是,要跟踪转化,Facebook要求您将页面置于达到预期结果时出现的转化中。即,如果我想显示客户已注册,我会将您注册后转到的页面作为成功对象进行跟踪。我的问题是,当客户注册时,在我的应用程序中没有登陆页面。该应用程序将用户带回主页。它在主页上显示了一条消息,所以我想看看是否有一种方法可以跟踪来自Controller操作而不是实际页面的转化。我需要计数的Action没有页面,它们是ControllerAction。是否有任何人都知道的关于如何执行此操作的gem、文档或最佳实践?这是进入布局文件的像素

  5. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  6. Qt Designer的简单使用 - 2

    在前面两节的例子中,主界面窗口的尺寸和标签控件显示的矩形区域等,都是用C++代码编写的。窗口和控件的尺寸都是预估的,控件如果多起来,那就不好估计每个控件合适的位置和大小了。用C++代码编写图形界面的问题就是不直观,因此Qt项目开发了专门的可视化图形界面编辑器——QtDesigner(Qt设计师)。通过QtDesigner就可以很方便地创建图形界面文件*.ui,然后将ui文件应用到源代码里面,做到“所见即所得”,大大方便了图形界面的设计。本节就演示一下QtDesigner的简单使用,学习拖拽控件和设置控件属性,并将ui文件应用到Qt程序代码里。使用QtDesigner设计界面在开始菜单中找到「Q

  7. objective-c - 在设置 Cocoa Pods 和安装 Ruby 更新时出错 - 2

    我正在尝试为我的iOS应用程序设置cocoapods但是当我执行命令时:sudogemupdate--system我收到错误消息:当前已安装最新版本。中止。当我进入cocoapods的下一步时:sudogeminstallcocoapods我在MacOS10.8.5上遇到错误:ERROR:Errorinstallingcocoapods:cocoapods-trunkrequiresRubyversion>=2.0.0.我在MacOS10.9.4上尝试了同样的操作,但出现错误:ERROR:Couldnotfindavalidgem'cocoapods'(>=0),hereiswhy:U

  8. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  9. ruby-on-rails - Rails Associations 的更新方法是什么? - 2

    这太简单了,太荒谬了,我在任何地方都找不到关于它的任何信息,包括API文档和Rails源代码:我有一个:belongs_to关联,我开始理解当您没有关联时您在Controller中调用的正常模型方法与您有关联时调用的方法略有不同。例如,我的关联在创建Controller操作时运行良好:@user=current_user@building=Building.new(params[:building])respond_todo|format|if@user.buildings.create(params[:building])#etcetera但我找不到关于更新如何工作的文档:@user

  10. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

随机推荐