我有2个qml文件。 Toolbarbutton.qml创建一个按钮,DockWidget.qml创建一个ListView。我正在尝试将Toolbarbutton中的按钮广播到DockWidget,该按钮已被点击。然后我想添加项目到我的listView。无法获取2个使用信号进行通信的QML文件
我一直在尝试使用信号来建立通信。在Toolbarbutton.qml中,我有一个ID为saveButton的Rectangle项目。在这个矩形项下,我添加了一个名为addSaveHistory()的信号。我缩短了代码,所以更容易看到我在做什么。
Rectangle {
id: saveButton
width: 50
height: 30
border.color: "white"
color: buttonMouseArea.containsMouse ? "grey" : "black"
//Button text
Text{
id: buttonLabel
anchors.centerIn: parent
text: "Save +"
color: "white"
}
signal addSaveHistory(string url)
MouseArea{
id: buttonMouseArea
anchors.fill: parent //anchor the mousearea to the rect area
//onClicked handles valid mouse button clicks
onClicked: {
addSaveHistory("Hello?") //dispatch the event
}
}
}
在DockWidget.qml文件中,我有一个使用Connections组件的项目。我缩短了代码,因此更容易看到我在做什么。
Item{
width: 100
height: 100
objectName: "Save + History"
Rectangle {
id: rect
anchors.fill: parent
color: "#323232"
Connections {
target: saveButton //id of rectangle in ToolbarButton.qml
onAddSaveHistory: {
// this is never called
}
}
}
我似乎无法弄清楚为什么onAddSaveHistory永远不会被调用。我也曾尝试使用Loader组件将Dockwidget.qml文件加载到Toolbarbutton.qml中,然后专门在Dockwidget中调用一个函数,但那不起作用。
我对信号的工作原理有错误的想法吗?我会非常感谢任何指导。
这是我的main.qml文件。
所有的import QtQuick 2.2
import Painter 1.0
import "save.js" as Save
Plugin {
//executed at startup
Component.onCompleted:{
//add toolbar
alg.ui.addToolBarWidget("ToolbarButton.qml")//add a button to toolbar
alg.ui.addDockWidget("DockWidget.qml")//add dock widget
Save.log("Incremental Save Plugin has been created")
}
}
嗨肖恩, 非常感谢您的帮助。我有一个独特的问题,因为我正在使用qml为另一个使用qml创建接口的应用程序创建一个插件。如你所建议的,我无法设置我的main.qml。这是我的main.qml需要格式化的方式。我编辑了我的原始帖子以显示main.qml。 – WesM
我编辑了ToolbarButton.qml,按照您的建议工作,以便将其放置在矩形项目下,然后使用id.signalFucntion()语法调用信号。 但是,它似乎是我试图建立的连接并不知道ToolbarButton.qml中的信号 – WesM
没有看到alg.ui.addToolBarWidget()和alg.ui.addDockWidget()是否难以说出解决方案是什么。我猜测他们实例化了作为参数传入的QML文件。不知何故,您需要能够引用那些能够使用插件{}范围内的Connections {}元素。您可能需要查看这些功能的文档(我还找不到任何公开的内容),或询问编写这些功能的开发人员是否有典型示例。 –