Qt4: intiale Breite von QDockWidget

Alles rund um die Programmierung mit Qt
Antworten
woigl
Beiträge: 10
Registriert: 4. Dezember 2006 17:06

Qt4: intiale Breite von QDockWidget

Beitrag von woigl »

Ich moechte gerne beim intialiseren und hinzufuegen eines QDockWidget zu einem QMainWindow die Breite definieren.

Beispiel waere das die Breite des QDockWidget 100pixel betraegt und der Rest vom centralWidget in Anspruch genommen wird.

Wichtig ist aber das der User danach die Breite des QDockWidget mit dem Slider aendern kann.

Hat jemand eine Idee wie man dies in Qt4 machen kann?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

resize schon mal ausprobiert?
woigl
Beiträge: 10
Registriert: 4. Dezember 2006 17:06

Beitrag von woigl »

upsala hat geschrieben:resize schon mal ausprobiert?
ja, aendert aber gar nichts!

Anbei mein Beispiel als Code:

Code: Alles auswählen

QDockWidget *dockWindowMailboxes = new QDockWidget(tr("Mailboxes"), this);
dockWindowMailboxes->resize(100,100);
dockWindowMailboxes->setAllowedAreas(Qt::LeftDockWidgetArea);
addDockWidget(Qt::LeftDockWidgetArea, dockWindowMailboxes);
hat jemand damit erfahrungen gesammelt?
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

.. also nach dem was ich gesehen (und bis zum Abwinken ausprobiert) habe, funktioniert das direkte Setzen der Breite des DockWidget mit Methoden des DockWidget (oder des MainWidget ) nicht. Man kann nur feste minimal und maximalwerte eingeben ... setMinimumWidth(..) ...setMaximumWidth(..), aber die sind dann halt fest :-(

was aber funktioniert, ist folgendes:

Das Dockwidget installiert in aller Regel mit ...->setWidget(...) ein anderes Widget (im Beispiel vom Typ DockInhaltFenster), das den eigentlichen Inhalt darstellt, sonst wäre es ja nutzlos. Dieses Widget muss folgende Methode überlagern :

Code: Alles auswählen

public QSize DockInhaltFenster::sizeHint() {
      return QSize(meine_lieblings_breite,meine_lieblings_hoehe);
}

Gruß Arne

PS.: habe ich nur mit Qt 3.x und QtJambi geprüft, wäre also für einen Hinweis dankbar ob es auch bei Qt4.x funktioniert
Nash
Beiträge: 118
Registriert: 27. April 2007 14:49

Beitrag von Nash »

nein es klappt nicht, bei mir tut sich zumindestens nicht, er ruft auch diese funktion nicht auf.

Code: Alles auswählen

QSize Console::sizeHint()
{
	return QSize(m_width, m_height);
}
habe Qt 4.2
@udisello
Beiträge: 50
Registriert: 19. März 2007 14:58
Wohnort: Sachsen

Beitrag von @udisello »

Es gibt noch die Möglichkeit, mit QSettings die Informationen über das Layout zu speichern. Beim ersten Start des Programms werden die Größen von Qt festgelegt. Der Benutzer kann sich dann seine Dockwidgets anordnen und deren Größe verändern. Beim nächsten Start können diese Informationen wieder geladen werden.

Zum Speichern:

Code: Alles auswählen

settings.setValue( QString::fromUtf8( "layout" ), saveState() );
Zum Laden:

Code: Alles auswählen

restoreState( settings.value( QString::fromUtf8( "layout" ) ).toByteArray() );
MfG @udisello

Qt Version 4.3.0, MS VS 2005
daimonion
Beiträge: 6
Registriert: 27. Juni 2007 15:46

Beitrag von daimonion »

Ich habe genau das selbe Problem, aber ebenso noch keine Lösung gefunden.

bin gerade dabei das initiale Fenster zu bauen. Daher habe ich noch keine Widgets die in die Socks reinkommen.

Vielleicht gibts ja noch ne andere Lösung. Im QT Assistant gehts ja auch.
NoobSaibot
Beiträge: 99
Registriert: 27. Januar 2005 15:55

Beitrag von NoobSaibot »

programm aufrufen und einstellungen vornehmen ( die gewünschte breite einstellen ). das ganze in eine QSettings datei mit QMainWindow::saveState() speichern. Diese Datei als interne Ressource einbinden.

Die Werte, die in der internen QSettings stehen, könnt ihr als Standardwerte verwenden.
daimonion
Beiträge: 6
Registriert: 27. Juni 2007 15:46

Beitrag von daimonion »

Okay, werd ich morgen gleich mal versuchen.
Antworten