Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多个QQuickWidget和一个QQmlEngine_Qml_Qquickwidget - Fatal编程技术网

多个QQuickWidget和一个QQmlEngine

多个QQuickWidget和一个QQmlEngine,qml,qquickwidget,Qml,Qquickwidget,我有个问题,希望你能帮助我 我有多个qqmlwidget,其中应该显示相同组件的不同实例。 组件是在运行时创建的,并使用其父窗口小部件中的特定属性。 问题是,这些组件中有多个嵌套项,因此加载速度非常慢。 我决定在应用程序预加载阶段将它们全部加载到QQmlEngine,然后在必要时创建它们。 所以我所有的QQMLwidget都有相同的QQmlEngine和相同的根上下文。 为了区分不同小部件的属性,我将在单独的上下文中创建组件的每个实例(每个QQmlWidget一个)。 创建之后,我将新创建对象的

我有个问题,希望你能帮助我

我有多个qqmlwidget,其中应该显示相同组件的不同实例。 组件是在运行时创建的,并使用其父窗口小部件中的特定属性。 问题是,这些组件中有多个嵌套项,因此加载速度非常慢。 我决定在应用程序预加载阶段将它们全部加载到QQmlEngine,然后在必要时创建它们。 所以我所有的QQMLwidget都有相同的QQmlEngine和相同的根上下文。 为了区分不同小部件的属性,我将在单独的上下文中创建组件的每个实例(每个QQmlWidget一个)。 创建之后,我将新创建对象的父项设置为QQmlWidget的根项; 问题是根项目在动态创建的对象中被引用,而他们找不到它。 你能提出解决办法吗?我在下面发布我的代码的简化版本

// main.cpp
QQmlEngine* e = new QQmlEngine;
QWidget* ww1 = new QWidget;
QWidget* ww2 = new QWidget;

QQuickWidget* w1 = new QQuickWidget(e, ww1);
QQuickWidget* w2 = new QQuickWidget(e, ww2);
w1->setSource(QUrl::fromLocalFile("main.qml"));
w2->setSource(QUrl::fromLocalFile("main.qml"));

QQmlComponent* comp = new QQmlComponent(e, "comp.qml");
QQmlContext* c1 = new QQmlContext(e);
QQmlContext* c2 = new QQmlContext(e);

QQuickItem* it1 = qobject_cast<QQuickItem*>(comp->create(c1));
it1->setParentItem(w1->rootObject());
QQuickItem* it2 = qobject_cast<QQuickItem*>(comp->create(c2));
it2->setParentItem(w2->rootObject());
ww1->show();
ww2->show();


//main.qml

Rectangle {
  id: root
}

//comp.qml

Rectangle {
  anchors.top : root.top
}

提前感谢。

当加载组件时,不设置父级,只有在调用
setParentItem
方法后,它才会被设置。当父项更改时,可以通过设置锚定来修复该问题

// comp.qml
Rectangle {
    onParentChanged: { anchors.top = parent.top; }
}

谢谢,这适用于我的简化案例,但不适用于实际案例,即实际引用在comp.qml层次结构中非常深入的组件中完成,并且可能具有不同的深度。同样,也可以通过调用beginCreate()、setParentItem()和finishCreate()来完成,在我的例子中,我希望能够用ID来引用它们,而不是通过调用父函数,这实际上是组件本身的参数。
// comp.qml
Rectangle {
    onParentChanged: { anchors.top = parent.top; }
}