将支持 QML 文件导入 Main.QML 时遇到问题

问题描述 投票:0回答:1

我正在尝试制作带有颜色主题的 QtQuick 应用程序。我计划制作一些 .qml 样式表来定义按钮颜色、字体颜色等概念。以下是样式表或多或少的示例:

pragma Singleton
import QtQuick

QtObject {
    property color bodyTextColor: "white"
    property color headerTextColor: "black"
    property int buttonBorderWidth: 3
    property color buttonColor: "#007bff"
    property color backgroundColor: "#000000"
    property color accentColor: "#6c757d"
    property int fontSize: 16
    property int titleFontSize: fontSize + 8
    property int labelFontSize: fontSize - 16
}

我尝试了

import "ClassicStylesheet.qml" as Styles
,但它找不到它,即使它与 Main.qml 位于同一根目录中(我收到“没有这样的目录”错误)。使用 ClassicStylesheet.qml 的绝对路径可以解决此问题并且应用程序可以运行,但它仍然无法工作。我收到以下错误:

找不到值类型 QQuickColorValueType 的任何构造函数来使用值 QVariant(QObject*, 0x0) 进行调用 qrc:/[项目名称]/Main.qml:31:17:无法将 undefined 分配给 QColor

当使用样式表的绝对路径运行时,所有组件都会呈现为黑色。这是我的 Main.qml 文件的示例,它使用可重用的 LargeButton 组件(使用默认值呈现良好,无需样式表)来创建主菜单按钮:

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

import "ClassicStylesheet.qml" as Styles

Window {
    width: 1280
    height: 720
    visible: true
    title: qsTr("Test")

    Rectangle {
        id: menuFrame
        width: 600
        height: 400
        color: "lightgrey"
        anchors.centerIn: parent
        radius: 25

        ColumnLayout {
            anchors.centerIn: parent
            spacing: 10

            LargeButton {
                text: "Settings"
                buttonColor: Styles.buttonColor
                accentColor: Styles.accentColor
                fontColor: Styles.fontColor

                onClicked:
                {

                }
            }
        }
    }
}

对此有何建议?为什么它无法识别我的文件或读取其内容?谢谢。

qt qml qtquick2
1个回答
0
投票

因为它被声明为单例,所以不需要导入它。只需将其与您的 QML 源文件放在一起,但是,请提供一个

qmldir
文件。

singleton ClassicStylesheet 1.0 ClassicStylesheet.qml

这是一个完整的工作演示:

import QtQuick
import QtQuick.Controls
Page {
    title: "Singleton Demo"
    Button {
        text: "Settings"
        palette.button: ClassicStylesheet.buttonColor
        palette.buttonText: ClassicStylesheet.fontColor
    }
}

// ClassicStylesheet.qml
pragma Singleton
import QtQuick

QtObject {
    property color bodyTextColor: "white"
    property color headerTextColor: "black"
    property int buttonBorderWidth: 3
    property color buttonColor: "#007bff"
    property color backgroundColor: "#000000"
    property color accentColor: "#6c757d"
    property int fontSize: 16
    property int titleFontSize: fontSize + 8
    property int labelFontSize: fontSize - 16
}

// qmldir
singleton ClassicStylesheet 1.0 ClassicStylesheet.qml

您可以在线尝试!

© www.soinside.com 2019 - 2024. All rights reserved.