首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >一个QQmlEngine具有多个QQuickWidgets

一个QQmlEngine具有多个QQuickWidgets
EN

Stack Overflow用户
提问于 2015-03-24 00:38:02
回答 1查看 1.3K关注 0票数 1

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

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

代码语言:javascript
复制
// 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
}

错误:

代码语言:javascript
复制
comp.qml - ReferenceError: root is not defined

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-03-24 18:45:47

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

代码语言:javascript
复制
// comp.qml
Rectangle {
    onParentChanged: { anchors.top = parent.top; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29215587

复制
相关文章

相似问题

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