将QQuickView重新加载到同一窗口容器中

Reload QQuickView into the same window container

本文关键字:窗口 QQuickView 新加载 加载      更新时间:2023-10-16

我想把插件写到我的程序中,作为显示在dock小部件中的qml

我以这种方式加载插件:

if (!qview) 
  qview = new QQuickView();
qview->engine()->clearComponentCache();
qview->setSource(QUrl(path));
QQuickItem *item_main = qview->rootObject();
QWindow* main_page = item_main->window();  
auto container = QWidget::createWindowContainer( main_page, ui- >dockWidgetContents );
container->show();

它工作正常,但重新加载插件相当慢,并导致闪烁。我认为这是因为createWindowContainer每次都会创建本机窗口。我可以通过强制QQuickView在重新加载后使用相同的窗口容器来加速重新加载吗?或者以某种方式避免窗口闪烁

解决方案非常简单:

if (!qview) {
  QWindow *wnd = new QWindow();
  QWidget::createWindowContainer(wnd, ui->dockWidgetContents )->show();
  qview = new QQuickView(wnd);
}