我正在使用createObject()创建ComponentDefinition的新对象实例,然后将其添加到容器中。当我的应用程序到达QML中的所述代码行时崩溃。
这是我的代码:
import bb.cascades 1.0
import Data.UpdateReservationView 1.0 //a custom C++ qmlRegisterType
Page {
property alias resDetails: updateRes.resDetails
attachedObjects: [
ComponentDefinition {
id: enhLabel
Label {
textStyle.fontSize: FontSize.PointValue
textStyle.fontSizeValue: 5.5
textStyle.color: Color.Black
}
},
UpdateReservationView {
id: updateRes
}
]
onResDetailsChanged: {
// some code
var newLabel = enhLabel.createObject(); //the app crashes upon reaching this line
newLabel.text = resDetails[i]["roomName"];
labelsContainer.add(newLabel);
}
ScrollView {
topMargin: 30.0
horizontalAlignment: HorizontalAlignment.Fill
Container{
leftPadding: 20.0
rightPadding: leftPadding
bottomPadding: 50.0
horizontalAlignment: HorizontalAlignment.Fill
Container {
id: labelsContainer
horizontalAlignment: HorizontalAlignment.Left
verticalAlignment: VerticalAlignment.Center
}
}
} //ScrollView ends
} //Page ends
我尝试使用.load()
代替.createObject()
,但得到的结果与 ComponentDefinition(enhLabel)在代码中的elswhere实例化相同,并根据我的理解.load()只是加载控件一次,而我需要动态多次创建它的新实例。
奇怪的是前一天代码运行完美,我没有对这个特定的QML文件进行任何更改。
可能是应用程序崩溃的原因。我确信它在使用旧的console.debug()方法到达var newLabel = enhLabel.createObject()
行时崩溃了。
答案 0 :(得分:0)
不确定您身边发生了哪些变化,但根据BB developer site上的代码示例,我可以看到您的代码看起来不错:
Container {
Button {
text: "Click to create bordered text"
onClicked: {
// Creates borderedTextComponent control and appends it
// to the container
var createdControl = borderedTextComponent.createObject();
container.add(createdControl);
createdControl.textString = "Hello Component";
createdControl.padding = 30;
createdControl.textColor = Color.DarkGray;
}
}
Container {
id: container
}
attachedObjects: [
ComponentDefinition {
id: borderedTextComponent
Container {
property variant borderColor: Color.Red
property variant fillColor: Color.White
property variant textColor: Color.Black
property string textString
property real padding: 10;
background: borderColor
leftPadding: padding
rightPadding: padding
topPadding: padding
bottomPadding: padding
Container {
background: fillColor
Label {
text: textString
textStyle.color: textColor
}
}
}
}
]
}
也许试试这个样本,看看你是否遇到环境问题,这个问题在标准的空Cascades项目中为我工作,并将代码粘贴到Page {}。
遗憾的是,您的代码中遗漏了太多东西,无法重现我的崩溃。