MDI- Anwendung

Alles rund um die Programmierung mit Qt
Antworten
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

MDI- Anwendung

Beitrag 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();

}
lightning.net
Beiträge: 12
Registriert: 24. September 2006 01:46

Beitrag von lightning.net »

machts überhaupt einen Sinn, 2 childdialogs mit gleichen Inhalten zu zeigen ? wir wärs wenn nur einer erlaubt wird.
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Erstell den 2. Child als QTreeView und setz darin das Model vom 1. Child.
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag von Whitefurrows »

Ich verstehe leider nicht wie das funktionieren soll oder was du damit meinst. Kannst du es mir Bitte etwas genauer erklären?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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?
Whitefurrows
Beiträge: 138
Registriert: 1. Mai 2006 19:50

Beitrag 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.
Antworten