Der Titel, die Position und die Sichbarkeit des DockWidget soll dabei erhalten bleiben. Deshalb wird nur ein DockWidget im MainWindow angelegt, das von allen Dokumenten abwechselnd genutzt werden soll.
Code: Alles auswählen
class MdiChild : public QTextEdit
{
.
.
public:
ParameterTree *equipment;
.
.
};
class MainWindow : public QMainWindow
{
.
.
QDockWidget *dockWdgtEqmt;
QDockWidget *getDockWdgtEqmt(){return dockWdgtEqmt;}
void createDockWindows();
void replaceEquipment(ParameterTree* equipment = 0);
.
.
};
void MainWindow::createDockWindows()
{
dockWdgtEqmt = new QDockWidget(tr("Equipment"), this);
dockWdgtEqmt->setObjectName("DW_0");
dockWdgtEqmt->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
addDockWidget(Qt::RightDockWidgetArea, dockWdgtEqmt);
}
Code: Alles auswählen
MdiChild::MdiChild()
{
equipment = new ParameterTree(theMainWin->getDockWdgtEqmt());
}
Code: Alles auswählen
bool MdiChild::loadFile(const QString &fileName)
{
QFile file(fileName);
if (file.open(QFile::ReadOnly | QFile::Text)) {
equipment->read(&file);
theMainWin->replaceEquipment(equipment);
}
.
.
return true;
}
void MainWindow::replaceEquipment(ParameterTree* equipment)
{
ParameterTree* old = qobject_cast<ParameterTree*>(dockWdgtEqmt->widget());
if (equipment != old) {
dockWdgtEqmt->setWidget(equipment);
dockWdgtEqmt->update();
}
Code: Alles auswählen
void TabWorkspace::updateMainWin(int index)
{
MdiChild *mdiChild = qobject_cast<MdiChild *>(QTabWidget::widget(index));
if (mdiChild)
{
theMainWin->setWindowTitle(mdiChild->pageTitle());
theMainWin->replaceEquipment(mdiChild->equipment);
}
}
Wenn man nun das DockWidget vergrößert, ändert sich die Größe des QTreeWidgets des zuvor geladenen Dokuments dahinter, die Größe es zuletzt geladenen bleibt unverändert.
Es hat den Anschein, als ob mit QDockWidget::setWidget(QWidget*) das zuvor gesetzte Widget nicht, oder nur teilweise entfernt wird. In der Doku von Trolltech habe ich keinen Hinweis gefunden, dass dieser Aufruf nur einmal verwendet werden darf.
Ich bin für jeden Hinweis dankbar.
Anton