3

使用 qt 5.2,我正在尝试动态添加一个简单的按钮,如下所示:

ApplicationWindow
{
    id: appWindow

    width: 640
    height: 420
    minimumHeight: 400
    minimumWidth: 600

    function addButton() {

        var obj = Qt.createComponent("Button.qml");

        if (obj.status == obj.Ready)
        {
            var button = obj.createObject(appWindow);
            button.color = "red";
            button.width=50;
            button.height=80;
            button.x=50; button.y=50;
           }
     }


    Button {
        anchors.centerIn: parent;
        text: "ok";

        onClicked: {
            addButton();
        }
    } ...

但就在 createComponent 之后,我总是得到:

QQmlComponent:组件没有准备好

怎么了 ?

4

1 回答 1

2

为了确保组件准备就绪,最好的方法是在 QML 部分中声明它,在 Component 对象中,以便它与文件的其余部分同时预加载:

ApplicationWindow {
    id: appWindow;

    Component {
        id: myButton;

        Button { }
    }

    function addButton () {
        var button = myButton.createObject (appWindow, {
                                                "color"  : "red",
                                                "width"  : 50,
                                                "height" : 80,
                                                "x"      : 50, 
                                                "y"      : 50
                                            });
    }

    ...
}

如您所见,我还冒昧地向您展示了直接使用良好属性一次性创建对象的语法,而不是以老式方式手动设置它们。更干净的代码,可能更高效。

于 2014-02-15T12:22:02.167 回答