以下是我想在文件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 方法
答案 0 :(得分:1)
您需要以某种方式创建对象。您有多种方法可以动态创建对象。一种方法是使用Component.createObject(parent)
,要求您在文件中实例化Component
在这里,您还可以传递一个Object({property0 : value, property1:value ... }
)作为第二个参数,以设置要实例化的Component
的属性。您不应该将父级设置为null
,因为它可能会发生,JS垃圾收集器再次过于激进。
或者,您可以使用Loader
从source
(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
更改为true
或false
。