图片未显示在QGraphicsScene中

时间:2016-09-29 15:03:38

标签: c++ windows qt

描述

我写了以下Qt代码。并为Windows(* .exe)制作可执行文件。但是QGraphicsScene中没有显示Image(JPG)。我已经检查过图像的路径是否正确。在下面的代码中,MyQGraphicsScene是派生类继承QGraphicsScene类。

 我在macOS中编译了相同的代码。然后,macOS的可执行文件(ELF)正确运行。图像文件显示在其组件中。我觉得源代码是一样的。但结果因环境而异。

开发环境

  • Windows 10
  • Qt版本:5.7.0
  • C ++编译器:Microsoft Visual C ++ Ver.14.0(MSVC2015)

源代码

    #include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGraphicsRectItem>
#include <QMessageBox>
#include <QIcon>
#include "TrainingData.h"
#include "trainingDataMaker.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    QGraphicsItem *curGItem;
    QListWidgetItem *listItem;

    ui->setupUi(this);
    scene = new MyQGraphicsScene(QRectF(0, 0, 400, 400));
    ui->graphicsView->setScene(scene);

    listItem = new QListWidgetItem();
    listItem->setIcon(QIcon("data/000001.jpg"));
    ui->imgListWidget->addItem(listItem);
    listItem = new QListWidgetItem();
    listItem->setIcon(QIcon("data/000276.jpg"));
    ui->imgListWidget->addItem(listItem);
    ui->imgListWidget->setIconSize(QSize(300,100));


    QPixmap pixmap;
    QImage img("data/000001.jpg");
    QTransform transForm;
    pixmap = QPixmap::fromImage(img);
    QGraphicsPixmapItem *imgPixmap = new QGraphicsPixmapItem(pixmap);
    transForm = QTransform();
    transForm.scale(0.1, 0.1);
    imgPixmap->setTransform(transForm);
    scene->addItem(imgPixmap);

    //connect(scene, SIGNAL(changed(const QList<QRectF> &)), imgPixmap, SLOT(chgSize(const QList<QRectF> &)));

}

2 个答案:

答案 0 :(得分:0)

  

我在macOS中编译了相同的代码。然后,macOS的可执行文件(ELF)   运行正常。图像文件显示在其组件中。我觉得很奇怪   源代码是一样的。但结果因环境而异。

由于它适用于MacOS / X但不适用于Windows,因此可能的解释是它是分布/环境问题。特别是,您的程序可能无法在Windows下找到Qt的imageformat插件(例如qjpeg4.dll或qjpeg5.dll),这就是图像未显示的原因。

要测试该理论,您可以将qjpeg * .dll插件文件复制到与.exe文件相同的文件夹中,然后重新运行您的程序,看看是否能使其表现更好。或者,如果您不想使用图像格式插件,您可以将.jpg文件转换为另一种文件格式,即Qt包括对BMP或PNG等本机(即基于非插件的)支持,并使用该文件格式代替。

答案 1 :(得分:0)

因此,如果从IDE启动应用程序,则此问题的原因是我对当前目录的误解。当前目录是下图中的(a)。

之前的目录结构
[Output directory is specified in build configuration] - (a)
  |- debug - (b)
  |    |- test.exe // executable file of this application
  |    |- data
  |        |-000001.jpg
  |- release

因此,我应该在“数据”目录中包含目录(a)中的图像文件,如下图所示。我觉得这个IDE的规格很奇怪。当然,如果应用程序直接启动,当前目录与exe文件的目标相同(单击exe文件)。

之后的目录结构
[Output directory is specified in build configuration] - (a)
  |- debug - (b)
  |    |- test.exe // executable file of this application
  |- release
  |- data
      |-000001.jpg