简体   繁体   English

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

[英]ReferenceError: Component is not defined - QML Dynamic object creation

ClickableRectangle.qml 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 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 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()
        }
    }
}

The error in the title appears in GUIControllers.js at this line: 标题中的错误出现在此行的GUIControllers.js中:
if (component.status === Component.Ready)

We need to import QtQuick 2.0 in GUIControllers.js as follows : 我们需要在GUIControllers.js中导入QtQuick 2.0如下所示

.import QtQuick 2.0 as QtQuickModuleImportedInJS

Then if we edit the culprit line as follows, the error vanishes: 然后,如果我们按如下方式编辑罪魁祸首,则错误消失:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM