QML 访问您的 qml 组件

Luc*_*uca 3 qt qml

我正在使用 QML 开发前端,但在从我的主 QML 窗口访问组件时遇到问题。所以,我的主 QML 窗口是这样的:

ApplicationWindow {
    id: rootWindow
    objectName: "window"

    property Component mainScreen: MainScreen {} // my component

    // This is a slot that gets called from C++ side.
    // The function gets called fine.
    function videoDone() {
        mainScreen.doVideo()
    }
}
Run Code Online (Sandbox Code Playgroud)

MainScreen组件在MainScreen.qml文件中写入为:

ControlView {
    id: mainScreenView
    objectName: "MainScreenView"


    function doVideo() {
        console.log("Called")
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这并没有按预期工作,我收到错误消息:

TypeError: Property 'doVideo' of object QQmlComponent is not a function
Run Code Online (Sandbox Code Playgroud)

我认为问题在于MainScreenApplicationWindow 级别没有看到的完整定义。我试图看看我是否可以施放它,但没有成功。

mainScreen.objectName返回一个空字符串而不是MainScreenView

Tar*_*rod 5

我认为使用MainScreen组件的正确方法是做这样的事情:

主文件

import QtQuick 2.5
import QtQuick.Controls 1.4

ApplicationWindow {
    id: rootWindow
    objectName: "window"
    visible: true

    MainScreen { id: mainScreen } // my component

    Component.onCompleted: {
        mainScreen.doVideo()
    }
}
Run Code Online (Sandbox Code Playgroud)

MainScreen.qml(与你相同的代码,但我使用Item而不ControlView只是检查编译)

import QtQuick 2.5

Item {
    id: mainScreenView
    objectName: "MainScreenView"

    function doVideo() {
        console.log("Called")
    }
}
Run Code Online (Sandbox Code Playgroud)

另一种选择是动态创建组件。