【问题标题】:Component is not ready Cannot assign object to property组件未准备好无法将对象分配给属性
【发布时间】:2018-10-03 18:07:04
【问题描述】:

我在main.qml 文件中有一个从QObject 继承的名为LoginManager 的c++ 类(我用qmlRegisterTypes 注册了它)

LoginManager{
    id: loginManager
}

现在我想将LoginPage.qml 文件添加到StackView

sv.push("/pages/LoginPage.qml",{lManager:loginManager});

登录页面

Page {
    id: root
    property LoginManager lManager

    Connections{
        target: lManager

        onMessageChanged: {
        }
        onLoginSuccessed: {
        }
    }
}

但是当我点击按钮将LoginPage.qml添加到StackView时出现错误

QmlComponent: 组件没有准备好 qrc:/main.qml:395:5: QML StackView: push: qrc:/pages/LoginPage.qml:16 无法将对象分配给属性

我在其他页面上做了同样的工作,但我不知道为什么我在这里得到错误?

编辑

当我评论连接时,错误就会消失!

【问题讨论】:

  • LoginManager 是 QQuickItem 还是 QObject?
  • @eyllanesc 是继承自QObject的c++类
  • push 需要一个 Item,在 C++ 中相当于 QQuickItem,如果 LoginManager 是唯一的,我建议在 C++ 中创建它并使用 setContextProperty() 将其导出到 QML,您可以访问该对象位于应用程序的任何部分。

标签: qt qml components qtquickcontrols2 stackview


【解决方案1】:

您使用绝对 URL 指向您的登录页面组件。尝试使其相对

sv.push("./pages/LoginPage.qml",{lManager:loginManager});

这应该可以解决问题。

【讨论】:

  • 嗯...这很奇怪。我在本地(在纯 QML 中)重现了您的问题,并且使用绝对路径实际上是导致打印 Component is not ready 消息的原因。也许您可以尝试将属性从property LoginManager lManager 更改为property var lManager;有时我过去也遇到过“类型化”属性的问题,但我不能确定这是否能解决您的问题......
猜你喜欢
  • 2019-08-09
  • 2021-06-07
  • 2014-04-05
  • 2021-06-30
  • 2016-02-03
  • 2011-06-06
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
相关资源
最近更新 更多