【问题标题】:Displaying an image with QGraphics Scene使用 QGraphicsScene 显示图像
【发布时间】:2011-11-25 12:16:18
【问题描述】:

在 QGraphicsScene 中显示加载的图像时遇到问题。

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 中加载图像时,它似乎会按比例放大到图像的大小,但会显示白屏。我可以将文本添加到图形场景中,并且可以正确显示。现在,如果我尝试将图像添加到不同小部件上的标签中,它会显示得很好。任何想法为什么?

干杯。

【问题讨论】:

  • 我曾经尝试过 Qt,但在显示图像时卡住了一天多。我最终检查了图像是否为空(例如 if(image.isNull() ),或者它是否在屏幕上(z 值),或者我的画家是否处于活动状态(我使用了 QPainter)。其中之一一切都奏效了。不过我不记得是哪一种了。如果没有其他方法,我建议使用相同的方法。

标签: c++ qt qgraphicsscene


【解决方案1】:

您看不到它,因为您传递了对构造函数的本地对象的引用。像素图项将在您的构造函数结束后立即销毁。请改用动态分配。

QGraphicsPixmapItem* pixmapitem = new QGraphicsPixmapItem(image);
scene.addItem(pixmapitem);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    相关资源
    最近更新 更多