我有一个QML快速表单,我有一个图像和一个相关的鼠标区域,如下所示:
// StatusBarForm.ui.qml
Image {
id: exitButton
width: 24
height: 24
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 5
source: "images/exit.png"
MouseArea {
id: exitButtonMouseArea
anchors.fill: parent
}
}
现在,根据文档我应该分离业务逻辑,设计师创建了一个StatusBar.qml
表单,我补充说:
exitButtonMouseArea.onClicked: {
Qt.quit()
}
现在问题是我在Mac上使用Qt 5.9对其进行了测试并且它有效(尽管Qt创建者强调了onClicked
处理程序抱怨exitButtonMouseArea identifier was not valid
。我也尝试了exitButton.exitButtonMouseArea.onClicked:
现在我在Linux上使用Qt 5.8
尝试了它并且应用程序没有初始化。如果我删除了事件处理程序,那就好了,当然我无法与图像交互。
所以,我的问题是如何在我的案例中提供UI文件之外的业务逻辑。
修改 在@derM回答之后,我做了以下事情:
// StatusBarForm.ui.qml
Image {
id: exitButton
width: 24
height: 24
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.leftMargin: 5
source: "images/exit.png"
}
// StatusBar.qml
StatusBarForm {
property alias exitButton: exitButton
Image {
id: exitButton
MouseArea {
id: exitButtonMouseArea
anchors.fill: parent
onClicked: {
Qt.quit()
}
}
}
}
我的组件初始化时,我从未收到onClicked
事件。
答案 0 :(得分:3)
问题是,您只能在同一个文件中按SELECT t1.Connected, t1.Region, t1.Homespassed
FROM connected as t1
UNION ALL
SELECT t2.Connected, t2.Region, t2.Homespassed
FROM connected as t2
访问对象,或者在对象树中爬行。
如果您仔细阅读this,则会发现他们没有通过Connected | Region | Homespassed | Year
访问该按钮,但他们将该按钮导出为属性
这是由这一行完成的:
id
导出后,您可以使用属性名称从外部访问它。
来自文档:
在您的代码中,这将是这样的:
// StatusBarForm.ui.qml
id
// main.qml
property alias button: button