Упрощение программы Qt, и у меня возникают проблемы с отображением изображения в Qt с использованием QGraphicsScene

Оба этих сегмента кода загружаются в изображение. Код 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();
}

Вывод кода 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();
}

Вывод кода 2

1 ответ

Хотите загрузить одно и то же изображение в обеих версиях кода? Если да, вы должны использовать тот же путь к этому изображению.

В первой версии вашего кода вы используете ":/images/2.png" в качестве источника изображения. Это путь, указывающий на файл в системе ресурсов Qt. Возможно, в вашем проекте есть файл.qrc, содержащий желаемый файл изображения.

Вы должны использовать тот же путь во второй версии и иметь тот же файл.qrc, скомпилированный в проект.

Другие вопросы по тегам