Seite 1 von 1
Zugriff auf offene Dialoge
Verfasst: 14. Oktober 2005 18:05
von Thomas
Hallo,
ich öffne in meinem Programm dynamisch mehrere Dialoge, die übereinander liegen bzw. gleichzeitig geöffnet sind. Nach der Eingabe von Text im obersten Dialog, möchte ich den Text in einen anderen bestehenden Dialog kopieren. Gibt es eine Möglichkeit auf einen beliebigen geöffneten Dialog zuzugreifen? Ich habe es mit
Code: Alles auswählen
QObject* par = this->parent();
qobject_cast<ProjectDialog *>(par)->setModelList(strModelList);
versucht. Auf diese Art kann ich auf den "Parent"-Dialog des obersten Dialogs zugreifen, aber nicht auf einen, den ich vor dem "Parent"-Dialog geöffnet habe. Wie muss ich vorgehen, um auf einen anderen zugreifen zu können?
Thomas
Verfasst: 14. Oktober 2005 20:25
von lepsai
parent() ist nicht korrekt, dafür gibt es parentWidget()...
Und sonst bau dir doch eine QMap mit allen Dialogen, dann hast einen leichten Zugriff auf alles. Übrigens ein Aufbau mit mehreren gleichzeitig geöffneten Dialogen ist ein Zeichen für ein schlecht durchdachtes GUI-Konzept... Nur so zum Nachdenken...
Verfasst: 15. Oktober 2005 14:00
von Thomas
Ich habe mir jetzt eine QMap zusammengestellt, in der ich als Wert Zeiger auf meine Dialoge speicher. Bei Bedarf rufe ich über eine Schlüsselwort den zeigen ab. Nach dem abrufen zeigt der Zeiger auf den richtigen Dialog (dies habe ich überprüft). Nun habe ich allerdings das Problem, dass ich auf die Membervariablen des Dialoges zugreifen kann. Ich erhalte eine Fehlermeldung, die mir sagt, dass der Lese- bzw. Schreibzugriff gelockt ist. Ich kann die Variablen weder lesen noch verändert.
Woran könnte das liegen?
Thomas
Verfasst: 15. Oktober 2005 14:05
von lepsai
Code ins Studio....
Verfasst: 15. Oktober 2005 15:02
von Thomas
Ich habe in meiner MainWindow-Klasse die QMap angelegt:
Header:
Code: Alles auswählen
...
private:
QMap<QString, QDialog*> *dialogMap;
};
#endif
Cpp:
Code: Alles auswählen
MainWindow::MainWindow()
{
....
dialogMap = new QMap<QString, QDialog*>;
}
void MainWindow::newProject()
// invoke the newProject dialog for creating a new I-MET project
{
if (maybeSave() && !proDial)
{
proDial = new ProjectDialog(this);
dialogMap->insert("NewProjectDialog", proDial);
proDial->setDialogMap(*dialogMap);
// Übergabe des QMap an die Dialogklasse
proDial->exec();
}
}
Ist die Übergabe an die Dialogklasse sinnvoll bzw. notwendig?
Dialogklasse NewProjectDialog:
header:
Code: Alles auswählen
...
public:
void setDialogMap(QMap<QString, QDialog*> &diagMap) {dMap = diagMap;}
private:
QMap<QString, QDialog*> dMap;
};
Cpp:
Code: Alles auswählen
...
void ProjectDialog::on_cameraEditButton_clicked()
// create a new camera file or edit an existing one
// Aufruf des zweiten Dialogs vom ersten aus
{
camEdit = new CameraEditorFormDialog(this);
dMap.insert("CameraEditor", camEdit); // einfügen des zweiten Dialoges in die QMap
camEdit->setDialogMap(dMap);
// übergabe des QMap als Referenz an die zweite Dialogklasse
this-hide();
camEdit->exec();
}
Zweite Dialogklasse:
header:
Code: Alles auswählen
...
public:
void setDialogMap(QMap<QString, QDialog*> &diagMap) {dialogMap = diagMap;}
private:
QMap<QString, QDialog*> dialogMap;
};
Cpp:
Code: Alles auswählen
void ...
{
NewProjectDialog p_newProject = (NewProjectDialog*)dialogMap.value("NewProjectDialog");
// Abruf des gespeicherten Zeigers auf den Projektdialog
p_newProject->setCameraID(ui.CameraIDEdit->text());
//Versuch eine private Variable des ProjektDialoges zu verändern -> scheitert
}
Verfasst: 15. Oktober 2005 21:00
von lepsai
bei NewProjectDialog p_newProject = ..., sollte es heissen:
NewProjectDialog * p_newProject =...
Sonst sehe ich keine Fehler...