我写了以下Qt代码。并为Windows(* .exe)制作可执行文件。但是QGraphicsScene中没有显示Image(JPG)。我已经检查过图像的路径是否正确。在下面的代码中,MyQGraphicsScene是派生类继承QGraphicsScene类。
我在macOS中编译了相同的代码。然后,macOS的可执行文件(ELF)正确运行。图像文件显示在其组件中。我觉得源代码是一样的。但结果因环境而异。
#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> &)));
}
答案 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