如何更改 Qt QML Drawer 的阴影颜色(不声明自定义样式)?

Posted

技术标签:

【中文标题】如何更改 Qt QML Drawer 的阴影颜色(不声明自定义样式)?【英文标题】:How to change shadow color of Qt QML Drawer (without declaring custom Style)? 【发布时间】:2017-09-24 06:41:48 【问题描述】:

我使用 QtQuick.Controls 2.2 中的 Drawer

Drawer 
    id: drawer
    width: parent.width/2
    height: parent.height
    modal: true
    ...

搭配风格:

[Controls]
Style=Material

[Material]
Theme=Dark
Accent=Red
Primary=#c64949

我想改变抽屉阴影的颜色。样式材质使用white color for the shadow(在打开的抽屉右侧)。

-- 由赏金赞助者编辑--

我发现阴影已定义,即。这里:http://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports/controls/Drawer.qml

作为:

T.Overlay.modal: Rectangle 
    color: Color.transparent(control.palette.shadow, 0.5)


T.Overlay.modeless: Rectangle 
    color: Color.transparent(control.palette.shadow, 0.12)

如果不定义全新的样式,如何一次性修改它们?

我大概可以重新定义一个完全自定义的控件.. 但是应该有一个兼容的版本?

【问题讨论】:

This 链接应该对您有所帮助。 这不完全是 OP(或我自己)所寻求的 - 链接描述了背景的自定义 - 我们想要 code.qt.io/cgit/qt/qtquickcontrols2.git/tree/src/imports/… - 覆盖 - 更改。 您是否检查过新的(在 Qt 5.10 中引入)Overlay 附加属性?好像可以附在ApplicationWindow。也许如果您在主窗口中定义这些属性,它将适用于所有弹出窗口? (不幸的是我无法测试它我的机器上没有 Qt 5.10) 所以他们没有提供设置选项。您可以滚动您自己的该琐碎控件的实现,或者自省到对象树以到达所需的对象并操作其属性,类似于我在这里提出的建议:***.com/questions/48736260/… 【参考方案1】:

正如@Blabdouze 提到的,您正在寻找的是Overlay.modal 属性。简单的工作示例:

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Controls 2.5

Window 
    visible: true
    width: 640
    height: 480
    title: qsTr("test")

    Drawer 
        height: parent.height
        width: parent.width/2
        Rectangle 
            anchors.fill: parent
            color: "green"
        

        Overlay.modal: Rectangle 
                  color: "red"
              
    

默认边缘是左边,所以从那里拖动它。

链接:

Documentation

Drawer source code

【讨论】:

以上是关于如何更改 Qt QML Drawer 的阴影颜色(不声明自定义样式)?的主要内容,如果未能解决你的问题,请参考以下文章

仅显示 Qt Qml Drawer 的一部分

qml无框窗口的阴影

在 Flutter 中更改 Drawer 小部件的顶部颜色

如何在 Cascades、Blackberry 10 中使用 Qt/QML/C++ 从另一个 qml 文件中更改一个 qml 文件中的标签文本?

Qt:如何在 C++ 端而不是 QML 上监视 Q_PROPERTY 更改

当变量在 QML 中更改其值时,如何在 Qt 中执行函数?