2017-03-03 3 views
1

Ich habe einige Fragen bezüglich QML. Ich habe eine TableView und, wenn ich auf eine Spaltenüberschrift klicke, muss ich ein neues Fenster öffnen, das alle Elemente unter dieser Spalte mit einer Schaltfläche auf der linken Seite jedes Elements enthält.
Wenn Sie auf diese Schaltfläche klicken, sollte eine Nachricht zur Aktualisierung an TableView gesendet werden.
Meine Fragen sind:
Wie man zwischen 2 qml Fenstern kommuniziert

  • Wie kann ich die per Mausklick für eine Spalte zu fangen?
  • Welche wäre die beste Lösung für das 2. Fenster: eine Tabellenansicht mit 2 Spalten (eine für die Schaltfläche und eine für das Element)? In diesem Fall bin ich mir nicht sicher, wie ich den Wert für die erste Spalte einstellen soll ...
  • Wie kann ich Nachrichten zwischen 2 qml Fenstern übergeben? Vom 1. Fenster sende ich das Modell (Elemente unter der Spalte) und vom 2. Fenster Fenster i zurücks einen oder mehrere Werte (je nachdem, wie viele Tasten aktiviert sind)

    Danke

Antwort

1

Sie zwischendurch mehrere Fenster in QML kommunizieren können, die genauso, wie Sie zwischen beliebigen anderen zwei kommunizieren Items indem Sie sie über id s referenzieren oder ihnen Eigenschaften zuweisen, die Sie später verwenden, um sie zu referenzieren. Ein Beispiel:

import QtQuick 2.7 
import QtQuick.Controls 2.0 
import QtQuick.Layouts 1.0 

Item { 
    ApplicationWindow 
    { 
     id: appWindow 
     width: 500 
     height: 800 
     visible: true 

     ListModel { 
      id: lm 
      Component.onCompleted: { 
       for (var i = 0; i < 42; i++) append({ message: 'Hellow World ' + i }) 
      } 
     } 

     ListView { 
      id: lv 
      width: 300 
      height: 800 
      model: lm 
      delegate: Button { 
       text: model.message 
       onClicked: secondWindow.text = text 
      } 
     } 
    } 

    ApplicationWindow 
    { 
     id: secondWindow 
     width: 500 
     height: 800 
     x: appWindow.x + 500 
     y: appWindow.y 
     visible: true 
     property alias text: label.text 

     Text { 
      id: label 
      anchors.centerIn: parent 
     } 
    } 
} 
Verwandte Themen