Drag&Drop zwischen zwei QTreeViews

Alles rund um die Programmierung mit Qt
Antworten
qtCuckoo
Beiträge: 1
Registriert: 11. April 2012 10:06

Drag&Drop zwischen zwei QTreeViews

Beitrag von qtCuckoo »

Hi,

folgendes versuche ich umzusetzen:

Ich habe zwei QTreeViews. Die erste QTreeView erhält ihre Daten aus einer XML Datei, welche als QStandardItemModel geladen wird. Die zweite QTreeView hat ebenfalls ein eigenes QStandardItemModel, dieses ist zu Beginn aber leer. Man soll mittels Drag&Drop einzelne Einträge aus der ersten QTreeView in die Zweite ziehen können um sie dort weiterzuverarbeiten.

Zur besseren Vorstellung meines Vorhabens kann man sich das ganze wie einen Kleider/Mode Katalog vorstellen. Es gibt eine Reihe von Produkten. Jedes Produkt hat spezielle Eigenschaften (Größe, Farbe, Anzahl, etc.). Die erste QTreeView ist der Katalog, die zweite QTreeView ist mein Bestellschein.

Die erste QTreeView besteht aus einer Spalte. Es soll also nur die Produktbezeichnung erscheinen. Die zweite QTreeView besteht aus zwei Spalten. Zieht man nun einen Eintrag aus der ersten QTreeView in die zweite QTreeView, so soll die Produktbezeichnung in der ersten Spalte erscheinen, die dazugehörige Produkteigenschaft soll in der zweiten Spalte zu sehen sein.

In der XML Datei habe ich folgende Struktur:

Code: Alles auswählen

<product type="lineedit">
	<entry column="0">
		<item value="Kunde"/>
	</entry>
	<entry column="1">
		<item value="Max Mustermann"/>
	</entry>
</product>

<product type="combobox">
	<entry column="0">
		<item value="Socken"/>
	</entry>
	<entry column="1">
		<item value="1 Paar"/>
		<item value="5 Paare"/>
		<item value="10 Paare"/>
	</entry>
</product>

<product type="combobox">
	<entry column="0">
		<item value="T-Shirt"/>
	</entry>
	<entry column="1">
		<item value="S"/>
		<item value="M"/>
		<item value="L"/>
		<item value="XL"/>
	</entry>
</product>
  • Product stellt einen Eintrag dar (also eine Zeile in der TreeView). Das Attribut type definiert, welches Widget für die Bearbeitung genutzt werden soll (einfaches Textfeld, Combobox, etc.)
  • Entry ist ein Eintrag in dieser Zeile. Das Attribut column definiert die Spalte, in welcher der Eintrag erscheinen soll
  • Item ist der Wert/Inhalt des Eintrags.
Nun zum eigentlichen Problem:

Drag&Drop von erster in zweite QTreeView funktioniert teilweise. Da es in der ersten QTreeView nur eine Spalte gibt, fehlen logischerweise beim Rüberziehen in die zweite QTreeView die Werte für die zweite Spalte (also die Produkteigenschaften). Ich habe schon versucht, auch in der ersten QTreeView eine zweite Spalte (gefüllt mit den Produkteigenschaften aus der XML) zu erzeugen. Dann habe ich die zweite Spalte mittels ui->treeViewFirst->hideColumn(1); auszublenden. Das Ergebnis war das gleiche.

Wie muss das DatenModel (QStandardItemModel) der ersten QTreeView aussehen, damit alle nötigen Informationen für die zweite QTreeView vorhanden sind, ohne einer zweiten Spalte in der ersten QTreeView?
Antworten