Qt:setScreenRect=分段故障

Qt: setScreenRect = segfault

本文关键字:分段 故障 setScreenRect Qt      更新时间:2023-10-16

基本上我需要一些东西来绘制,它很容易与设计器一起使用(例如,从QWidget继承和覆盖paintEvent需要在Qt设计器中使用它)。

因此,我将QGraphicsView添加到.ui文件中,并在按钮方法中编写这样的代码:

QGraphicsScene *scene = ui->graphicsView->scene();    
const QRectF scene_r = ui->graphicsView->sceneRect();
//here I see that scene_r == {0, 0, 0, 0};

然后我添加这样的代码:

const QSize draw_size = ui->graphicsView->size();
//draw_size == {100, 100}
scene->setSceneRect(QRectF(0, 0, draw_size.width(), draw_size.height()));

并在scene->setSceneRect线上得到segfault这里发生了什么?

实际上我想要正确的这样的代码:

//scene size == draw_size
QPixmap pix(draw_size.width(), draw_size.height());
//fill pix with external program
scene->addPixmap(map_pix);

有可能吗?

我以前从未使用过QGraphicsView。

获得segfault的原因是您没有为视图设置任何场景,因此scene()将返回一个空指针。

QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();

另一种选择是创建没有场景的视图,然后稍后添加:

void    setScene(QGraphicsScene *scene)

参考:http://doc.qt.io/qt-5/qgraphicsview.html