Ich habe 2 qml-Dateien. Toolbarbutton.qml erstellt eine Schaltfläche und DockWidget.qml erstellt eine ListView. Ich versuche, die Schaltfläche in Toolbarbutton an DockWidget zu senden, dass auf die Schaltfläche geklickt wurde. Ich möchte dann Elemente zu meinem ListView hinzufügen.Probleme beim Empfang von 2 QML-Dateien zur Kommunikation mit Signalen
Ich habe versucht, ein Signal zu verwenden, um die Kommunikation herzustellen. In der Toolbarbutton.qml habe ich ein Rechteckelement mit einer ID von saveButton. Unter diesem Rechteck Item habe ich ein Signal namens addSaveHistory() hinzugefügt. Ich habe den Code gekürzt, damit ich besser sehen kann, was ich mache.
In der DockWidget.qml-Datei habe ich ein Element, das die Connections-Komponente verwendet. Ich habe den Code gekürzt, damit ich besser sehen kann, was ich mache.
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
}
}
}
Ich kann nicht herausfinden, warum der onAddSaveHistory nie aufgerufen wird. Ich habe auch versucht, eine Loader-Komponente zu verwenden, um die Dockwidget.qml-Datei in Toolbarbutton.qml zu laden und dann speziell eine Funktion in Dockwidget aufzurufen, aber das funktioniert nicht so gut.
Habe ich nur eine falsche Vorstellung davon, wie die Signale funktionieren sollten? Ich würde jede Führung sehr schätzen.
Hier ist meine Datei 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")
}
}
Hallo Sean, Vielen Dank für die Hilfe. Ich habe ein einzigartiges Problem, weil ich die qml verwende, um ein Plugin für eine andere Anwendung zu erstellen, die qml verwendet, um Schnittstellen zu erstellen. Ich kann meine main.qml nicht so einrichten, wie Sie es vorgeschlagen haben.So muss meine main.qml formatiert werden. Ich habe meinen ursprünglichen Post bearbeitet, um die main.qml anzuzeigen. – WesM
Ich habe die ToolbarButton.qml so bearbeitet, dass sie so funktioniert, wie Sie es vorgeschlagen haben, sodass sie unter dem Rechteckelement platziert wird. Anschließend wird das Signal mit der Syntax id.signalFucntion() aufgerufen. Es scheint jedoch, als die Verbindung, die ich versuche, weiß nicht über das Signal in der ToolbarButton.qml – WesM
Ohne zu sehen, was alg.ui.addToolBarWidget() und alg.ui.addDockWidget() ist es schwer zu sagen Was ist die Lösung? Ich vermute, dass sie die als Argumente übergebenen QML-Dateien instanziieren. Irgendwie müssen Sie in der Lage sein, auf diese Bezug zu nehmen, um ein Connections {} Element im Plugin {} Bereich verwenden zu können. Möglicherweise müssen Sie sich die Dokumente für diese Funktionen ansehen (ich kann noch nichts öffentliches für sie finden) oder fragen, ob die Entwickler, die sie geschrieben haben, ein typisches Beispiel haben. –