将TextStyle从c++传递到QML
Pass TextStyle from c++ to QML
我在使用c++方法设置标签的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++(作品)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,而不必将Label对象传递给方法?
在阅读了关于文本样式的文档之后,我建议您尝试这样做:
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
在浏览了各种。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++的base属性,它需要一个TextStyle对象,但是当你从QML设置它时,它需要一个QVariant。使用->property("style")
,我们可以得到QML期望的QVariant
相关文章:
- 从C++实例化QML
- 使用CMake创建QML插件
- QT通过C++添加映射QML项目
- 如何在没有信号的情况下从C++执行QML插槽
- QML按钮点击功能执行顺序
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 建议在运行时将带有类实例的列表从c++导入qml
- Qt Quick-如何仅从c++代码与qml属性交互
- 如何将带有自定义对象的容器从C++传递到QML
- QML 使用带有参数C++函数
- 最佳做法是从另一个线程访问 qml 中的Q_PROPERTY
- 如何从C++端挂接到 QML 项的 onClick 事件
- 在 qml 中使用 Q_ENUM 和 Q_PROPERTY 作为枚举类
- 从C++更改 QML 图像源
- QML TableView 使用 QtQuick.Controls 2 单击行
- 如何多次询问来自QML对话框的输入?
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 阅读 QML 中结构C++ QVector 的 QVector
- 如何使用connect将qml按钮与同一类的cpp函数连接起来
- Qt QML桌面应用程序自动化测试