我正在开发一个Qt应用程序,在这个应用程序中,用户可以在QGraphicsScene中添加QML对象。列出了可用的QML对象,用户可以添加任意数量的对象。
直到现在,我使用了QQuickWidgets。QGraphicsScene包含一个顶级小部件,它是我创建的所有QQuickWidgets的父部件。它很好,但我的性能有问题。由于有大量的对象,应用程序开始减速,在RAM中占用太多的空间(在我创建的第一个包含400个对象的示例中,空间超过1.5GB)。
我认为它来自于Qt处理QQuickWidgets的方式,并希望尝试另一种方式,即使用QQuickViews。为此,我创建了一个根视图,并将其转换为QWidget,以便将其嵌入到我的视图(即QWidget )中。然后,在根视图中为每个创建的对象添加一个新的QQuickView。
创建根视图、其容器和引擎:
_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的创建:
QQuickView *view = new QQuickView(_engine, _rootView);
view->setSource(url);
view->setResizeMode(QQuickView::SizeViewToRootObject);
view->show();
它可以工作,但问题是每个QQuickView都会创建自己的线程,这不会改变我处理它的方式,而是发生在内存中。我不明白为什么,因为我把它们重新放到了根视图中。
因此,我的问题如下:
1-是否有办法防止QQuickViews创建自己的线程?
使用QQuickViews确实比使用QQuickWidgets更少内存消耗吗?
3-如果不是,我如何处理在QWidget视图中添加大量QML对象而不消耗太多内存?
https://stackoverflow.com/questions/69434038
复制相似问题