【问题标题】:QML - Cannot assign to non-existent property "style"QML - 无法分配给不存在的属性“样式”
【发布时间】:2018-03-13 18:41:02
【问题描述】:

我将 Qt 5.10.1 与 Qt Creator 4.5.1 一起使用,style 属性在元素中永远不可用。

比如这里显示ButtonStyle QML Type,我想做:

Button {
    text: "A button"
    style: ButtonStyle {...}
}

但是,我得到了错误:

无法分配给不存在的属性“style”

我尝试了一个矩形,进度条,我得到了同样的错误。

编辑#1:

我确实拥有所有这些进口商品。如果缺少导入,我会在 ButtonStyle 上收到错误,但错误在 style 上。

import QtQuick 2.2
import QtQuick.Controls 2.3
import QtQuick.Dialogs 1.0
import QtGraphicalEffects 1.0
import QtQuick.Shapes 1.0
import QtQuick.Layouts 1.3
import QtQuick.Controls.Styles 1.4

【问题讨论】:

    标签: qt qml qt5 qtquickcontrols qtquickcontrols2


    【解决方案1】:

    QML 中有两种类型的按钮:

    在您的情况下,您正在导入 Qt QuickControls 2 按钮:import QtQuick.Controls 2.3,并且该按钮没有 style 属性。

    如果你需要使用样式你必须导入:

    import QtQuick.Controls 1.4
    

    代替:

    import QtQuick.Controls 2.3
    

    如果您使用 Qt Quick Controls 和 Qt Quick Controls 2 中的项目,您可以使用命名空间将它们分开:

    import QtQuick.Controls 2.3 as QQC2
    import QtQuick.Controls 1.4 as QQC1
    
    QQC1.Button {
        text: "A button"
        style: ButtonStyle {...}
    }
    
    QQC2.another_item_of_Qt_Quick_Controls2{
    }
    

    【讨论】:

    • 谢谢!这是一个伟大而明确的答案。我不明白为什么有些人反对这个问题。文档并不清楚。
    【解决方案2】:

    您可以通过修改Qt Quick Controls 2按钮的背景和内容项这两个视觉项来自定义:

    https://doc.qt.io/qt-5/qtquickcontrols2-customize.html#customizing-button

    import QtQuick 2.12
    import QtQuick.Controls 2.12
    
    Button {
        id: control
        text: qsTr("Button")
    
        contentItem: Text {
            text: control.text
            font: control.font
            opacity: enabled ? 1.0 : 0.3
            color: control.down ? "#17a81a" : "#21be2b"
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
            elide: Text.ElideRight
        }
    
        background: Rectangle {
            implicitWidth: 100
            implicitHeight: 40
            opacity: enabled ? 1 : 0.3
            border.color: control.down ? "#17a81a" : "#21be2b"
            border.width: 1
            radius: 2
        }
    }
    

    【讨论】:

      【解决方案3】:

      确保导入QtQuick.Controls.Styles

      import QtQuick.Controls.Styles 1.4
      Button {
          text: "A button"
          style: ButtonStyle {...}
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 2015-12-07
        • 1970-01-01
        • 2014-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多