15 Stimmen

QDockWidget Anfangsbreite

Wie kann ich die anfängliche Breite eines QDockWidgets festlegen?

Ich habe die sizeHint-Funktion implementiert, aber was nun?

15voto

David Dibben Punkte 17424

Die Dokumentation für QDockWidget sagt:

Ein QDockWidget fungiert als Wrapper für sein Child-Widget, das mit setWidget() gesetzt wird. Benutzerdefinierte Größenhinweise, minimale und maximale Größen und Größenrichtlinien sollten im untergeordneten Widget implementiert . QDockWidget respektiert sie und passt seine eigenen Beschränkungen an, um den Rahmen und den Titel einzuschließen. Größenbeschränkungen sollten nicht für das QDockWidget selbst festgelegt werden Denn sie ändern sich je nachdem, ob es angedockt ist; ein angedocktes QDockWidget hat keinen Rahmen und eine kleinere Titelleiste.

Der Hinweis auf die Größe wird also von dem übernommen, was Sie in das Dock-Widget eingeben. Haben Sie versucht, die Größe des QDockWidget das Kind?

Aber ich stimme Marius zu, am besten ist es wahrscheinlich, wenn man die QSettings zum Speichern und Wiederherstellen der Breite aller Dockfenster beim Start der Anwendung. Werfen Sie einen Blick auf QMainWindow::saveState Abgesehen von der Beschaffung der Daten von saveState und nicht aus einzelnen Funktionen, sieht meine Speicherfunktion sehr ähnlich aus wie die von Marius beschriebene.

6voto

Marius Punkte 55729

Wenn Sie möchten, dass es die gleiche Breite wie bei der letzten Ausführung des Programms hat, sollten Sie sich die Einstellungen ansehen. Die Qt 4.4 Dokumentation hat ein Beispiel, wie man Einstellungen verwendet aquí .

So habe ich es gemacht:

void Applicotion::readSettings() {
  QSettings settings("Company Name", "Application Name");
  settings.beginGroup("LibraryDock");
  libraryDock->setFloating(settings.value("docked").toBool());
  libraryDock->resize(settings.value("size", QSize(1, 1)).toSize());
  libraryDock->move(settings.value("pos", QPoint(200, 200)).toPoint());
  addDockWidget((Qt::DockWidgetArea)settings.value("dockarea", Qt::RightDockWidgetArea).toInt(), libraryDock);
  settings.endGroup();
}

void Applicotion::writeSettings() {
  QSettings settings("Company Name", "Application Name");
  settings.beginGroup("LibraryDock");
  settings.setValue("dockarea", dockWidgetArea(libraryDock));
  settings.setValue("docked", libraryDock->isFloating());
  settings.setValue("size", libraryDock->size());
  settings.setValue("pos", libraryDock->pos());
  settings.endGroup();

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X