我正在尝试制作带有颜色主题的 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:
{
}
}
}
}
}
对此有何建议?为什么它无法识别我的文件或读取其内容?谢谢。
因为它被声明为单例,所以不需要导入它。只需将其与您的 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
您可以在线尝试!