用QGraphics场景显示图像场景
问题描述:
在QGraphicsScene中显示加载的图像有问题。用QGraphics场景显示图像场景
CTextBox::CTextBox(QWidget* parent /* = NULL */)
{
QPixmap image;
image.load("basketball.png");
grid = new QGridLayout();
grid->setSpacing(1);
textBrowser = new QTextEdit(this);
treeView = new QTreeView;
treeLabel = new QLabel;
treeLabel->setText("Tree View:");
debugLabel = new QLabel;
debugLabel->setText("Debug:");
standardModel = new QStandardItemModel;
rootNode = standardModel->invisibleRootItem();
treeView->setModel(standardModel);
QGraphicsPixmapItem pixmapitem(image);
//scene.addText("Graphics");
scene.addItem(&pixmapitem);
//rect = scene.addRect(QRectF(0,0, 100, 100));
//QGraphicsItem *item = scene.itemAt(50, 50);
widget = new QWidget();
view = new QGraphicsView;
view->setScene(&scene);
view->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
//proxy = scene.addWidget(widget);
//label = new QLabel();
grid->addWidget(textBrowser, 1, 0);
grid->addWidget(debugLabel, 0, 0);
grid->addWidget(treeView, 1, 1);
grid->addWidget(treeLabel, 0, 1);
//grid->addWidget(&image, 2,0);
//grid->addWidget(view, 2, 0);
//grid->addWidget(widget, 2, 0);
//grid->addWidget(proxy, 2,0);
view->show();
//widget->setLayout(view);
//widget->show();
setLayout(grid);
//label->addItem()
}
基本上当我尝试加载图像中的QGraphicsScene似乎扩展到图像的大小,但是显示白色画面。我可以将文字添加到图形场景中,并且可以正确显示。现在,如果我尝试将图像添加到其他小部件上的标签上,它会显示正常。任何想法为什么?
干杯。
答
您不会看到它,因为您将引用传递给构造函数的本地对象。像素图项目将在您的构造函数结束后立即被破坏。改用动态分配。
QGraphicsPixmapItem* pixmapitem = new QGraphicsPixmapItem(image);
scene.addItem(pixmapitem);
我曾经试过Qt,并被困在显示图像超过一天。我最终检查图像是否为null(例如,if(image.isNull()),或者它是否在屏幕上(z值),或者我的画家是否活动(我使用QPainter)。事情起作用了,但我不记得是哪一个,如果没有其他作用,我推荐采用相同的方法。 –