在使用c ++方法时,我在设置Label的TextStyle时遇到问题,它总是导致应用程序崩溃。
我有一个c ++ getStyle()方法。我希望能够像这样调用它(删除参数以简化代码示例):
Label {
id: myLabel
text: "test with style"
textStyle.base: _App.getStyle();
}
以下不起作用:
TextStyle ApplicationUI::getStyle() {
TextStyle *blueStyle = new TextStyle(bb::cascades::SystemDefaults::TextStyles::smallText());
blueStyle->setColor(Color::Blue);
return *blueStyle;
}
目前,我能够使其工作的唯一方法是将整个Label对象传递给方法并使用c ++设置样式。然而,这使得QML代码更加冗长,导致了这一点:
Label {
id: myLabel
text: "test with style"
onCreationCompleted: {
_App.setStyle(myLabel);
}
}
C ++(Works)
void ApplicationUI::setStyle(AbstractTextControl* label) {
TextStyle *blueStyle = new TextStyle(bb::cascades::SystemDefaults::TextStyles::smallText());
blueStyle->setColor(Color::Blue);
label->textStyle()->setBase(*blueStyle);
}
有没有办法将TextStyle直接传递给QML标签而不必将Label对象传递给方法?
答案 0 :(得分:0)
阅读documentation on text styles后,我建议您尝试这样的事情:
Page {
content: Container {
attachedObjects: [
TextStyleDefinition {
id: myStyle
base: _App.getStyle()
}
]
Label {
text: "A label with some text."
textStyle {
base: myStyle.style
}
}
} // end of Container
} // end of Page
答案 1 :(得分:0)
在浏览了各种.h文件并进行实验后,我设法解决了这个问题。
QML:
Label {
id: myLabel
text: "test with style"
textStyle.base: _App.getStyle();
}
C ++:
QVariant ApplicationUI::getStyle() {
TextStyleDefinition *textStyle = new TextStyleDefinition();
textStyle->setColor(Color::Blue);
QVariant style = textStyle->property("style");
return style;
}
诀窍是,当从c ++设置Label的Style.base属性时,它需要一个TextStyle对象,但是当你从QML设置它时,它需要一个QVariant。使用->property("style")
我们可以获得QML期望的QVariant。