在QML中动态创建按钮

时间:2014-01-25 16:13:42

标签: qt components qml qtquickcontrols

使用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:组件未就绪

怎么了?

1 个答案:

答案 0 :(得分:2)

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

ApplicationWindow {
    id: appWindow;

    Component {
        id: myButton;

        Button { }
    }

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

    ...
}

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