相关疑难解决方法(0)

样式化QML而无需手动标记要设置样式的每个属性

我知道QML不像小部件一样支持CSS样式,我已经阅读了关于样式/主题的替代方法:

这些方法的共同点是它们要求开发人员指定可以设置样式的QML部分,方法是绑定到"样式化QML文件/单例"中的属性,或者使用Loader加载不同的QML组件在样式名称上.我想要的是像CSS中的"id"选择器而不是"类"选择器,因此单个QML文件不必知道它们是否将在以后设置样式.

我目前的方法使所有QML文件看起来与此类似(使用链接2中的方法):

Main.qml

Rectangle {
    Id: background
    color: g_theme.background.color 
    //g_theme is defined in root context and loaded dynamically
}
Run Code Online (Sandbox Code Playgroud)

我想做的是:

Main.qml

Rectangle {
    Id: background
    color: “green” // default color
}
Run Code Online (Sandbox Code Playgroud)

然后有一个定义(或类似)的样式文件

Main.qml #background.color: red
Run Code Online (Sandbox Code Playgroud)

目前这是可能的,还是未来Qt版本的管道,或者首选的样式方式是否仍然类似于上面链接中描述的方法?

css qt styling qml

18
推荐指数
1
解决办法
1万
查看次数

Qt 5 样式:动态加载 qml 文件

我目前正在尝试以不同的风格扩展我们的应用程序。对于每种样式,我都有一个单独的 qml 文件,其中包含颜色定义等。样式A.qml:

import QtQuick 2.0
QtObject {
    property color textColorStandard: 'black'
    ...
}
Run Code Online (Sandbox Code Playgroud)

在我的 main.qml 中,我想根据软件属性加载正确的 qml 文件:

import QtQuick 2.0
Item {
    id: mainPanel
    ....

    Loader {
        id: myDynamicStyle
        source:  Property.UseThemeA? "StyleA.qml" : "StyleB.qml"
    }
    ...
    Item {
            id: BackGround
            color: myDynamicStyle.textColorStandard
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是这种方法不起作用。还有其他/更好的方法来完成造型吗?

谢谢,迈克尔

c++ qt styling qml

4
推荐指数
1
解决办法
3564
查看次数

标签 统计

qml ×2

qt ×2

styling ×2

c++ ×1

css ×1