簡體   English   中英

圖像未顯示在QGraphicsScene中

[英]Image is not shown in QGraphicsScene

描述

我寫了以下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> &)));

}

我在macOS中編譯了相同的代碼。 然后,macOS的可執行文件(ELF)正確運行。 圖像文件顯示在其組件中。 我覺得源代碼是一樣的。 但結果因環境而異。

由於它可以在MacOS / X下工作,但不能在Windows下工作,一個可能的解釋是它是一個分布/環境問題。 特別是,您的程序可能無法在Windows下找到Qt的imageformat插件(例如qjpeg4.dll或qjpeg5.dll),這就是圖像未顯示的原因。

要測試該理論,您可以將qjpeg * .dll插件文件復制到與.exe文件相同的文件夾中,然后重新運行您的程序,看看是否能使其表現更好。 或者,如果您不想使用圖像格式插件,您可以將.jpg文件轉換為另一種文件格式,即Qt包括對BMP或PNG等本機(即基於非插件的)支持,並使用該文件格式代替。

因此,此問題的原因是我在從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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM