简化Qt程序,我在使用QGraphicsScene在Qt中显示图像时遇到问题

时间:2016-08-10 16:39:47

标签: image qt qgraphicsview qgraphicsscene qgraphicspixmapitem

这两个代码段都加载到图像中。代码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();
}

Output of Code 1

代码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();
}

Output of Code 2

1 个答案:

答案 0 :(得分:0)

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

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

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