通过在QML中调用导入的javascript函数来设置全局属性

问题描述

我在我的QtQuick应用程序中使用Universal style,并且想提供一个ColorDialog来调整强调色。

我有这样的东西:

ColorDialog {
    id: accChooser
    title: "Please choose a color"
        onAccepted: {
            setGlobalAccentColor(accChooser.color) 
        }
}

*请注意,我不能简单地在子项中写Universal.accent=...,因为它对父项没有影响。请参见this

和此功能

function setGlobalAccentColor(accentColor){
    Universal.accent = accentColor
}

函数setGlobalAccentColoraccChooser在同一个QML文件中定义时,它起作用,但是如果我在外部JS文件(例如helpers.js)中定义该函数并通过导入:

import "helpers.js" as JSHelpers

并以这种方式使用它:

ColorDialog{
...
    JSHelpers.setGlobalAccentColor(colorDialog.color)
...
}

它不起作用。应用程序的输出中没有特定的错误或警告消息。

谢谢。

解决方法

可能需要在javascript文件中导入通用样式。

文档universal style如下(请参阅相关性部分)

必须分别导入通用样式,才能访问 通用样式特有的属性

您可以按照以下所述尝试将importing插入javascript(helpers.js)文件。

data.table

然后尝试访问(例如:.import QtQuick.Controls.Universal 2.12 as JsUniversal ..)。

,

请注意,我不能简单地在子项中编写Universal.accent = ...,因为它对父项没有影响。

虽然将其设置为子级不会影响整个应用程序,但您可以将其直接设置为整个窗口。

Window.window.Universal.accent = accentColor;

Universalattached object,您可以通过执行<object>.<AttachingType>将其附加到任意对象上,而不仅仅是当前对象。 我们通过另一个附加属性Window.window访问该窗口,将其附加到父窗口。