简化 Qt 程序,我无法使用 QGraphicsScene 在 Qt 中显示图像
Posted
技术标签:
【中文标题】简化 Qt 程序,我无法使用 QGraphicsScene 在 Qt 中显示图像【英文标题】:Simplifying a Qt program and I am having trouble displaying an image in Qt using QGraphicsScene 【发布时间】:2016-08-10 16:39:47 【问题描述】:这两个代码段都加载到图像中。代码 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();
代码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();
【问题讨论】:
两者之间有很多区别 - 例如。从哪里加载文件,并设置场景背景。您应该能够逐步地从一个移动到另一个,直到找到破坏它的更改。首先检查myImage.isNull()
是否紧跟在load()
之后。
你能详细说明它为什么坏了吗?
【参考方案1】:
您想在两个版本的代码中加载相同的图像吗? 如果是,您也应该使用此图像的相同路径。
在您的代码的第一个版本中,您使用“:/images/2.png”作为图像源。这是指向 Qt 资源系统中文件的路径。您的项目中可能有一个包含所需图像文件的 .qrc 文件。
您应该在第二个版本中使用相同的路径,并将相同的 .qrc 文件编译到项目中。
【讨论】:
以上是关于简化 Qt 程序,我无法使用 QGraphicsScene 在 Qt 中显示图像的主要内容,如果未能解决你的问题,请参考以下文章
如何在Python和Qt Quick QML应用程序中实现简化的双向数据绑定