首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在QWidget应用程序中使用QQuickView或QQuickWidget添加大量QML对象会带来性能问题。

在QWidget应用程序中使用QQuickView或QQuickWidget添加大量QML对象会带来性能问题。
EN

Stack Overflow用户
提问于 2021-10-04 09:56:53
回答 2查看 173关注 0票数 0

我正在开发一个Qt应用程序,在这个应用程序中,用户可以在QGraphicsScene中添加QML对象。列出了可用的QML对象,用户可以添加任意数量的对象。

直到现在,我使用了QQuickWidgets。QGraphicsScene包含一个顶级小部件,它是我创建的所有QQuickWidgets的父部件。它很好,但我的性能有问题。由于有大量的对象,应用程序开始减速,在RAM中占用太多的空间(在我创建的第一个包含400个对象的示例中,空间超过1.5GB)。

我认为它来自于Qt处理QQuickWidgets的方式,并希望尝试另一种方式,即使用QQuickViews。为此,我创建了一个根视图,并将其转换为QWidget,以便将其嵌入到我的视图(即QWidget )中。然后,在根视图中为每个创建的对象添加一个新的QQuickView。

创建根视图、其容器和引擎:

代码语言:javascript
运行
复制
    _rootView = new QQuickWindow();
    _rootView->resize(1024, 720);
    _rootView->show();

    QWidget *container = QWidget::createWindowContainer(_rootView, this);
    container->resize(_rootView->size());
    container->setObjectName("TopLevelQmlViewWidget");
    _layout->addWidget(container);

    _engine = new QQmlEngine(_rootView);

表示对象的QQuickViews的创建:

代码语言:javascript
运行
复制
    QQuickView *view = new QQuickView(_engine, _rootView);
    view->setSource(url);
    view->setResizeMode(QQuickView::SizeViewToRootObject);
    view->show();

它可以工作,但问题是每个QQuickView都会创建自己的线程,这不会改变我处理它的方式,而是发生在内存中。我不明白为什么,因为我把它们重新放到了根视图中。

因此,我的问题如下:

1-是否有办法防止QQuickViews创建自己的线程?

使用QQuickViews确实比使用QQuickWidgets更少内存消耗吗?

3-如果不是,我如何处理在QWidget视图中添加大量QML对象而不消耗太多内存?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69434038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档