如何在启动时绘制 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C# 中停止/暂停表单绘制?

MFC:当没有选项卡存在时,如何绘制 CTabView 背景?

如何从 2 种颜色为启动屏幕背景创建可绘制对象?

Android如何绘制View

在 iOS 上,当某些维度信息不可用时,我们如何在 viewDidLoad 中的屏幕上绘制东西?

View的绘制流程