将TextStyle从c ++传递给QML

时间:2014-05-27 12:08:04

标签: c++ qt qml blackberry-10

在使用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对象传递给方法?

2 个答案:

答案 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。