简化 Qt 程序,我无法使用 QGraphicsScene 在 Qt 中显示图像

Posted

技术标签:

【中文标题】简化 Qt 程序,我无法使用 QGraphicsScene 在 Qt 中显示图像【英文标题】:Simplifying a Qt program and I am having trouble displaying an image in Qt using QGraphicsScene 【发布时间】:2016-08-10 16:39:47 【问题描述】:

这两个代码段都加载到图像中。代码 1,加载图像并具有缩放功能,代码 2 应该只加载图像。代码 1 完美运行,但是当我尝试简化它时,我失去了加载图像功能。由于某种原因,图像在可见之前就被破坏了。

它似乎应该相当简单,但我似乎无法修复它。

代码 1:(这可行,但似乎过于复杂)

#include <QtGlobal>
#if QT_VERSION >= 0x050000
    #include <QtWidgets>
#else
    #include <QtGui>
#endif

int main(int argc,char* argv[])

  QApplication app(argc,argv);
  QImage image(":/images/2.png"); 

  QGraphicsScene* scene = new QGraphicsScene();
  QGraphicsView* view = new QGraphicsView(scene);
  QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(image));

  scene->setBackgroundBrush(QPixmap(":/images/2.png"));
  scene->setBackgroundBrush(image.scaled(100,100,Qt::IgnoreAspectRatio,Qt::SmoothTransformation));

  QGraphicsPixmapItem* pi = scene->addPixmap(QPixmap::fromImage(image).scaledToWidth(50));
  QGraphicsEllipseItem *item2 = new QGraphicsEllipseItem( 0, &scene );

  item2->setRect( -50.0, -50.0, 50, 100.0 );
  scene->addItem(item2);
  view->show();  
  return app.exec();

代码2:(这是简化版,但已损坏)

#include <QtGlobal>

#if QT_VERSION >= 0x050000
    #include <QtWidgets>
#else
    #include <QtGui>
#endif

int main(int argc, char *argv[])

  QApplication app(argc, argv);

  QImage myImage;
  myImage.load("2.png");

  QGraphicsScene* scene = new QGraphicsScene();
  QGraphicsView* view = new QGraphicsView(scene);
  QGraphicsPixmapItem* item = new QGraphicsPixmapItem(QPixmap::fromImage(myImage));

  scene->addItem(item);
  view->show();

  return app.exec();

【问题讨论】:

两者之间有很多区别 - 例如。从哪里加载文件,并设置场景背景。您应该能够逐步地从一个移动到另一个,直到找到破坏它的更改。首先检查myImage.isNull() 是否紧跟在load() 之后。 你能详细说明它为什么坏了吗? 【参考方案1】:

您想在两个版本的代码中加载相同的图像吗? 如果是,您也应该使用此图像的相同路径。

在您的代码的第一个版本中,您使用“:/images/2.png”作为图像源。这是指向 Qt 资源系统中文件的路径。您的项目中可能有一个包含所需图像文件的 .qrc 文件。

您应该在第二个版本中使用相同的路径,并将相同的 .qrc 文件编译到项目中。

【讨论】:

以上是关于简化 Qt 程序,我无法使用 QGraphicsScene 在 Qt 中显示图像的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python和Qt Quick QML应用程序中实现简化的双向数据绑定

Qt:如何在 QTimer 处于活动状态时延迟程序?

Qt 程序无法运行

无法编译简单的 Qt QFtp 程序

使用 macdeployqt 构建 QSqlDatabase 的 Qt 应用程序无法正常工作

Qt Creator 2.7.1 和 Qt 4.8.4 无法远程调试库