如何在启动时绘制 QLines?
Posted
技术标签:
【中文标题】如何在启动时绘制 QLines?【英文标题】:How to draw QLines at startup? 【发布时间】:2018-12-10 21:37:27 【问题描述】:我将在 QGraphicsScene 中绘制 QLine 并通过 QGraphicsView 显示它。
这条线是在主窗口构造期间绘制的,但在绘制后不久离开 MainWindow 构造函数后并在到达任何插槽之前被删除。 (我在调试过程中注意到了这种行为。)
最相关的代码行是:
MainWindow::MainWindow(QWidget* parent):
uinew Ui::MainWindow,
scenenew QGraphicsScene(this),
viewnew ClickableMap(scene), / ... */
ui->setupUi(this);
ui->view->setScene(scene);
for (/* ... */ )
QGraphicsItem* edgeDrawing= scene->addLine(x1, y1, x2, y2);
edgeDrawing->setZValue(1);
ui->view->show();
为什么这幅画被隐藏了?用信号槽的概念画图没问题(鼠标点击QGraphicsView),但我想在程序启动时显示画图。
【问题讨论】:
显示 ClickableMap 类 view 是否相关?记住 view 和 ui->view 是两个不同的东西 那么,您将项目添加到场景中,但不久之后它们被“神奇地”删除了吗?你不会从某个地方打电话给QGraphicsScene::clear()
,是吗?无论如何,您的代码中的某些内容会导致场景被清除。
【参考方案1】:
感谢@hyde,我找到了答案:我在加载一些图片后调用的插槽中执行了 scene->clear()。显然,执行被 Qt 延迟了。 (尽管这些输出指令是在源代码中调用 QGraphicsView::clear() 之后放置的,但在实际删除场景之前输出了一些调试输出。)
【讨论】:
以上是关于如何在启动时绘制 QLines?的主要内容,如果未能解决你的问题,请参考以下文章
MFC:当没有选项卡存在时,如何绘制 CTabView 背景?