Seite 1 von 1

MDI- Anwendung

Verfasst: 7. Oktober 2006 01:09
von Whitefurrows
Hi,

wie kann ich in einer MDI- Anwendung in den Childs den gleichen Inhalt anzeigen lassen.

Beispiel:
Ich habe eine Projektliste (QTreeWidget). Entsprechend zu dem gewählten Projekt werden die Daten in einem Fenster (child) angezeigt. Wähle ich jetzt das erste Projekt enthält child1 Daten vom ersten Projekt. Jetzt kann ich noch einmal das erste Projekt öffnen dann enthält child2 ebenfalls die Daten vom ersten Projekt.

Das Problem dabei ist ich kann ein Projekt in zwei Fenster öffnen und unterschiedliche Änderungen vornehmen was nicht sein darf.

Wie erreiche ich es, wenn in child1 und child2 das gleiche Projekt geöffnet ist, der Inhalt sich entsprechend ändert (wen das überhaupt geht)?

Falls die erste Variante nicht machbar ist, wie kann ich dann zumindest verhindern, dass ein Projekt mehrmals geöffnet wird.

Hier mein Code dazu:

Code: Alles auswählen

void MainWindow::openProject()
{

QWidget* parent=this->parentWidget();

MdiChild* child=new MdiChild(parent);
reinterpret_cast<QWorkspace*>(parent->parentWidget())->addWindow(child);

child->setProject(apd->getProject(treeWidget->currentItem()->text(3)));
child->show();

}

Verfasst: 7. Oktober 2006 12:15
von lightning.net
machts überhaupt einen Sinn, 2 childdialogs mit gleichen Inhalten zu zeigen ? wir wärs wenn nur einer erlaubt wird.

Verfasst: 7. Oktober 2006 12:29
von Whitefurrows
Nein das macht eigentlich keinen Sinn zwei childs mit gleichem Inhalt anzuzeigen. Wie schaffe ich es aber, dass jeweils nur ein child mit dem gleichen Inhalt angezeigt wird?

Verfasst: 9. Oktober 2006 14:39
von upsala
Erstell den 2. Child als QTreeView und setz darin das Model vom 1. Child.

Verfasst: 9. Oktober 2006 14:50
von Whitefurrows
Ich verstehe leider nicht wie das funktionieren soll oder was du damit meinst. Kannst du es mir Bitte etwas genauer erklären?

Verfasst: 9. Oktober 2006 15:07
von upsala

Code: Alles auswählen

QTreeWidget *child1;

QTreeView *child2=new QTreeView();
child2->setModel(child1->model());

workspace->addWidget(child2);
child2->show();
Außerdem, für was den reinterpret_cast? Nimm dynamic_cast oder qobject_cast.

Verfasst: 12. Oktober 2006 18:51
von Whitefurrows
Hallo,

danke für den Tipp. Allerdings denke ich, das es so nicht Funktioniert.

MainWindow ist ein QWidget auf diesem befindet sich ein QTreeWidget. In dem QTreeWidget werden die Projekte angezeigt (Name), welche in der Datenbank enthalten sind. Die Tabelle dazu sieht so aus:

Feld P_ID
Feld P_Name

Abhängig von dem Projektnamen bzw. dem aktuell gewältem QTreeWidgetItem (Text) werden die die entsprechenden Daten in einem weiteren Widget angezeigt:

Code: Alles auswählen

void MainWindow::openProject() 
{ 

QWidget* parent=this->parentWidget(); 

MdiChild* child=new MdiChild(parent); 
dynamic_cast<QWorkspace*>(parent->parentWidget())->addWindow(child); 

child->setProject(apd->getProject(treeWidget->currentItem()->text(3))); 
child->show(); 

}
Dieses Widget Zeigt dann die entsprechenden daten zum Projekt (Projektname) an, welche mit getProject() aus der Datenbank ausgelesen werden.


Die Tabelle dazu sieht so aus:

Feld PDATA_ID
Feld P_ID
Feld Beschreibung
... weitere Felder gekürzt.

Ich hoffe jetzt habe ich das Problem etwas besser erklärt und ihr könnt mir sagen, wie ich es schaffen kann, damit das entsprechende Projekt nur einmal Angezeigt wird?


Gruß

Whitefurrows



reinterpret_cast war nur zum Testen

Verfasst: 12. Oktober 2006 19:30
von upsala
Wie erreiche ich es, wenn in child1 und child2 das gleiche Projekt geöffnet ist, der Inhalt sich entsprechend ändert (wen das überhaupt geht)?
Und das wird durch meinen Beispielcode erreicht. Hast du ihn überhaupt ausprobiert?

Verfasst: 12. Oktober 2006 22:33
von Whitefurrows
Leider konnte ich deinen Beispielcode nicht ausprobieren, da ich kein child1 und child2 habe, so habe ich nur jeweils das neue MdiChild bezeichnet, welches in den QWorkspace hinzugefügt wird.

Das ganze sieht so aus, in einem QMainWindow wird ein QWidget angezeit, in diesem ist die zuvor gezeigte Funktion (openProject() ) welche über eine Schaltfläche aufgerufen wird. Dabei wird ein neues MdiChild (QWidget) dem QWorkspace hinzugefügt, in dem das gewählte Projekt angezeigt wird.

Wenn wir das gleiche meinen, ist mir leider immer noch nicht klar, was bei deinem Beispiel child1 und child2 sein soll und wie ich das ganze in meinem Programm umsetzen kann. Sei bitte so nett und versuche es mir so zu erklären, damit ich es verstehe.