Qt ReferenceError:未在SpinBox QML中定义down
我引用并复制粘贴了相同的代码,但出现以下错误: 参考错误:未定义向下和 引用错误:未定义up。 代码:Qt ReferenceError:未在SpinBox QML中定义down,qt,qml,qtquick2,qt-quick,qtquickcontrols,Qt,Qml,Qtquick2,Qt Quick,Qtquickcontrols,我引用并复制粘贴了相同的代码,但出现以下错误: 参考错误:未定义向下和 引用错误:未定义up。 代码: 我应该包括任何其他导入吗?不,您不需要包括任何其他导入。只是,该示例使用了不好的做法,在这里您可以看到原因: 这是示例的(简化为仅修改up.indicator)代码: import QtQuick 2.6 import QtQuick.Controls 2.0 SpinBox { id: control value: 50 editable: true up
我应该包括任何其他导入吗?不,您不需要包括任何其他导入。只是,该示例使用了不好的做法,在这里您可以看到原因: 这是示例的(简化为仅修改up.indicator)代码:
import QtQuick 2.6
import QtQuick.Controls 2.0
SpinBox {
id: control
value: 50
editable: true
up.indicator: Rectangle {
x: control.mirrored ? 0 : parent.width - width
height: parent.height
implicitWidth: 40
implicitHeight: 40
color: up.pressed ? "#e4e4e4" : "#f6f6f6" // <---*
border.color: enabled ? "#21be2b" : "#bdbebf"
Text {
text: "+"
font.pixelSize: control.font.pixelSize * 2
color: "#21be2b"
anchors.fill: parent
fontSizeMode: Text.Fit
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}
up来自哪里?首先,它将查看使用它的对象-矩形
。矩形
没有向上
-属性,因此它将继续并查找文件的根节点,即旋转框
-它有一个向上
-属性,该属性也有一个按下
的值
当我们尝试使用它(错误的方式)时,情况看起来就不同了。让我们添加一个应用程序窗口
:
import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
ApplicationWindow {
id: window
width: 800
height: 600
visible: true
SpinBox {
id: control
value: 50
editable: true
up.indicator: Rectangle {
x: control.mirrored ? 0 : parent.width - width
height: parent.height
implicitWidth: 40
implicitHeight: 40
color: up.pressed ? "#e4e4e4" : "#f6f6f6"
border.color: enabled ? "#21be2b" : "#bdbebf"
Text {
text: "+"
font.pixelSize: control.font.pixelSize * 2
color: "#21be2b"
anchors.fill: parent
fontSizeMode: Text.Fit
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}
}
同一行-将尝试在矩形中查找up
,失败并继续查找文件根节点,该节点现在是应用程序窗口
。在这里,它又失败了。由于ApplicationWindow
未在可能存在另一个文件根节点的另一个文件中使用,搜索将结束并最终失败
出了什么问题?该示例的作者错过了应用始终使用完全限定标识符的良好实践的步骤:id.property….
,例如,他定义了矩形的x
-值
更改行:
color: up.pressed ? [...]
致:
将解决这个问题,因为我们现在明确声明在哪里查找属性up
重要课程
- 名称不是通过从子节点到父节点来解析的,而是始终从子节点到文件根节点,依此类推,直到无法继续解析为止
- 始终通过
父对象
(但请注意,您可能不知道父对象到底是什么。因此理想情况下,仅针对锚点和位置)或通过对象的id
不,您不需要包括任何其他导入。只是,该示例使用了不好的做法,在这里您可以看到原因:
这是示例的(简化为仅修改up.indicator)代码:
import QtQuick 2.6
import QtQuick.Controls 2.0
SpinBox {
id: control
value: 50
editable: true
up.indicator: Rectangle {
x: control.mirrored ? 0 : parent.width - width
height: parent.height
implicitWidth: 40
implicitHeight: 40
color: up.pressed ? "#e4e4e4" : "#f6f6f6" // <---*
border.color: enabled ? "#21be2b" : "#bdbebf"
Text {
text: "+"
font.pixelSize: control.font.pixelSize * 2
color: "#21be2b"
anchors.fill: parent
fontSizeMode: Text.Fit
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}
up来自哪里?首先,它将查看使用它的对象-矩形
。矩形
没有向上
-属性,因此它将继续并查找文件的根节点,即旋转框
-它有一个向上
-属性,该属性也有一个按下
的值
当我们尝试使用它(错误的方式)时,情况看起来就不同了。让我们添加一个应用程序窗口
:
import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
ApplicationWindow {
id: window
width: 800
height: 600
visible: true
SpinBox {
id: control
value: 50
editable: true
up.indicator: Rectangle {
x: control.mirrored ? 0 : parent.width - width
height: parent.height
implicitWidth: 40
implicitHeight: 40
color: up.pressed ? "#e4e4e4" : "#f6f6f6"
border.color: enabled ? "#21be2b" : "#bdbebf"
Text {
text: "+"
font.pixelSize: control.font.pixelSize * 2
color: "#21be2b"
anchors.fill: parent
fontSizeMode: Text.Fit
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
}
}
}
}
同一行-将尝试在矩形中查找up
,失败并继续查找文件根节点,该节点现在是应用程序窗口
。在这里,它又失败了。由于ApplicationWindow
未在可能存在另一个文件根节点的另一个文件中使用,搜索将结束并最终失败
出了什么问题?该示例的作者错过了应用始终使用完全限定标识符的良好实践的步骤:id.property….
,例如,他定义了矩形的x
-值
更改行:
color: up.pressed ? [...]
致:
将解决这个问题,因为我们现在明确声明在哪里查找属性up
重要课程
- 名称不是通过从子节点到父节点来解析的,而是始终从子节点到文件根节点,依此类推,直到无法继续解析为止
- 始终通过
父对象
(但请注意,您可能不知道父对象到底是什么。因此理想情况下,仅针对锚点和位置)或通过对象的id
请显示更多的代码。至少需要文件根节点的导入和结构(包括根节点)。我认为您删除了它周围的一个项(例如应用程序窗口)?@derM我没有删除任何内容。上面的代码只是复制粘贴:这正是您尝试执行的代码?这对我来说很好。请显示更多的代码。至少需要文件根节点的导入和结构(包括根节点)。我认为您删除了它周围的一个项(例如应用程序窗口)?@derM我没有删除任何内容。上面的代码只是复制粘贴:这正是您尝试执行的代码?这对我来说很好。我尝试了完全相同的方法,想添加一条评论,你很快;-)。。。谢谢你的详细解释。请投票。。回答得好,但我为开发者感到难过D在我的辩护中,我可能是从中复制的,因为控件是根。我会设法解决的。事实上,这是错误的。如果代码在它自己的文件中(例如MySpinBox.qml
),那么它可以正常工作。只有当代码被粘贴到一个不是根项目的文件中时,问题才会出现。我尝试了完全相同的方法,并想添加一条注释,您非常快;-)。。。谢谢你的详细解释。请投票。。回答得好,但我为开发者感到难过D在我的辩护中,我可能是从中复制的,因为控件是根。我会设法解决的。事实上,这是错误的。如果代码在它自己的文件中(例如MySpinBox.qml
),那么它可以正常工作。只有当代码粘贴到不是根项的文件中时,问题才会出现。