ReferenceError:未定义组件 - QML动态对象创建

时间:2014-07-29 10:41:10

标签: javascript qt qml qtquick2

ClickableRectangle.qml

import QtQuick 2.0;

Rectangle
{
    width: 40;   height: 40;   x: 0;   y: 0;

    // Fluorescent green
    color:'#23FF23';

    border.color: 'black';   border.width: 2;   radius: 100

    property int key;
    signal       iHaveBeenCalled (var key);

    MouseArea
    {
        anchors.fill: parent;
        onClicked:
        {
            iHaveBeenCalled.call (0, key)
        }
    }
}

GUIControllers.js

.import "GlobalVariablesAndFunctions.js" as GlobalVariablesAndFunctions

function createDynamicRectangles ()
{
    /// Returns a Component object created using the QML file at the specified url, or null if an empty
    /// string was given.
    var component = Qt.createComponent ("ClickableRectangle.qml");
    /// The returned component's Component::status property indicates whether the component was
    /// successfully created.
    if (component.status === Component.Ready)
    {
        /// arrayOfXAxixOfPoints and arrayOfYAxixOfPoints are the arrays holding x and y axis coordinates
        /// of the rectangles (respectively) to be plotted.
        /// Both these arrays are techincally supposed to have equal number of points which will the
        /// determine number of rectangles to be plotted.
        for (var i = 0; i < GlobalVariablesAndFunctions.arrayOfXAxixOfPoints.length; i++)
        {
            dynamicRectangles[i]  = component.createObject (vehicleDrivingAreaRect, {x: 0, y: 0})

            /// After an object of the component is created at a specified default position (0, 0) in our
            /// case, we can calculate and reset its position and other properties at leisure as follows.
            dynamicRectangles[i].x = GlobalVariablesAndFunctions.arrayOfXAxixOfPoints[i] - (dynamicRectangles[i].width / 2)
            dynamicRectangles[i].y = GlobalVariablesAndFunctions.arrayOfYAxixOfPoints[i] - (dynamicRectangles[i].height / 2)
        }

        numberOfDynamicRectanglesActive = GlobalVariablesAndFunctions.arrayOfXAxixOfPoints.length
    }
}

main.qml

import QtQuick 2.0
import "GUIControllers.js" as GUIControllers

Rectangle
{
    id: rootContainer
    width: 360
    height: 360
    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            GUIControllers.createDynamicRectangles()
        }
    }
}

标题中的错误显示在此行的 GUIControllers.js 中:
if (component.status === Component.Ready)

1 个答案:

答案 0 :(得分:5)

我们需要在 GUIControllers.js as follows中导入 QtQuick 2.0

.import QtQuick 2.0 as QtQuickModuleImportedInJS

然后,如果我们按如下方式编辑罪魁祸首,则错误消失:

if (component.status === QtQuickModuleImportedInJS.Component.Ready)