如何设置我的按钮组件来打开一个窗口

时间:2017-02-03 09:35:14

标签: qt click qml qtquick2

以下是我想在文件PopUpFreeCoins.qml中打开的窗口的代码:

import QtQuick 2.0
import QtQuick.Controls 2.1
Item {
    property int t
    property int c
    ListModel{
        id:ff
        ListElement {
            name: "ByFollow"
            s: "Images/follow.png"
        }
        ListElement {
            name: "ByLike"
            s: "Images/care.png"
        }
        ListElement {
            name: "ByComment"
            s: "Images/chat.png"
        }
    }
    ListView{
        width:t-t/10
        height: c/5
        layoutDirection:Qt.LeftToRight
        orientation: ListView.Horizontal
        model: ff
        spacing:50
        delegate: Button{
            contentItem:  Image{
            source: s
        }}
    }
}

属性t设置为等于主文件中的窗口width,属性c设置为窗口height。这是我Button.qml的代码:

Button{//Below Right
        width:profilePicture.width/2
        height:profilePicture.width/2
        x:profilePicture.x+profilePicture.width
        y:profilePicture.y+profilePicture.height
        contentItem: Image {
            source: "Images/freecoins.png"
            anchors.fill: parent
        }
        onClicked: PopUp{height:100;width:300;PopUpFreeCoins{t:a;c:b;}}
    }

属性a是窗口宽度,b是窗口高度。 这一行onClicked: PopUp{height:100;width:300;PopUpFreeCoins{t:a;c:b;}}有一个我不知道如何处理的错误! 这是错误:

  

无法分配没有默认值的对象类型PopUpFreeCoins_QMLTYPE_0   方法

1 个答案:

答案 0 :(得分:1)

您需要以某种方式创建对象。您有多种方法可以动态创建对象。一种方法是使用Component.createObject(parent),要求您在文件中实例化Component 在这里,您还可以传递一个Object({property0 : value, property1:value ... })作为第二个参数,以设置要实例化的Component的属性。您不应该将父级设置为null,因为它可能会发生,JS垃圾收集器再次过于激进。

或者,您可以使用Loadersource(QML文件)或sourceComponent加载它。在这里,你不会遇到垃圾收集器的问题。

import QtQuick 2.7
import QtQuick.Controls 2.0

ApplicationWindow {
    width: 1024
    height: 800

    visible: true

    Button {
        text: 'create'
        onClicked: test.createObject(this)
    }

    Button {
        x: 200
        text: 'load'
        onClicked: loader.active = !loader.active
    }

    Loader {
        id: loader
        source: 'TestObj.qml'
        active: false
    }

    Component {
        id: test
        TestObj {}
    }
}

TestObj.qml包含要打开的Window

或者,您可以从头开始创建Window,只需将visible更改为truefalse