如何在启动时绘制QLines?
How to draw QLines at startup?
我要在 QGraphicsScene 中绘制 QLine 并通过 QGraphicsView 显示它。
该线是在主窗口构造期间绘制的,但在绘制后不久离开主窗口构造函数后到达任何插槽之前被删除。 (我在调试期间注意到了这种行为。)
最相关的代码行是:
MainWindow::MainWindow(QWidget* parent):
ui{new Ui::MainWindow},
scene{new QGraphicsScene(this)},
view{new ClickableMap(scene)}, / ... */
{
ui->setupUi(this);
ui->view->setScene(scene);
for (/* ... */ ) {
QGraphicsItem* edgeDrawing= scene->addLine(x1, y1, x2, y2);
edgeDrawing->setZValue(1);
}
ui->view->show();
}
为什么图纸被隐藏了?用signal-slot的概念画图没问题(鼠标点击QGraphicsView),但我想在程序启动时显示画图
感谢@hyde,我找到了答案:我在加载一些图片后调用的插槽中执行了 scene->clear() 。显然,执行被 Qt 延迟了。 (尽管这些输出指令在源代码中调用 QGraphicsView::clear() 之后放置,但在实际删除场景之前输出了一些调试输出。)
我要在 QGraphicsScene 中绘制 QLine 并通过 QGraphicsView 显示它。
该线是在主窗口构造期间绘制的,但在绘制后不久离开主窗口构造函数后到达任何插槽之前被删除。 (我在调试期间注意到了这种行为。)
最相关的代码行是:
MainWindow::MainWindow(QWidget* parent):
ui{new Ui::MainWindow},
scene{new QGraphicsScene(this)},
view{new ClickableMap(scene)}, / ... */
{
ui->setupUi(this);
ui->view->setScene(scene);
for (/* ... */ ) {
QGraphicsItem* edgeDrawing= scene->addLine(x1, y1, x2, y2);
edgeDrawing->setZValue(1);
}
ui->view->show();
}
为什么图纸被隐藏了?用signal-slot的概念画图没问题(鼠标点击QGraphicsView),但我想在程序启动时显示画图
感谢@hyde,我找到了答案:我在加载一些图片后调用的插槽中执行了 scene->clear() 。显然,执行被 Qt 延迟了。 (尽管这些输出指令在源代码中调用 QGraphicsView::clear() 之后放置,但在实际删除场景之前输出了一些调试输出。)