Seite 1 von 1

Inhalt für QDockWidget erscheint verkrüppelt woanders

Verfasst: 6. April 2012 10:49
von sieben
Hallo liebe QT-Community,
folgendes Problem:
Bildschirmfoto-Ausschnitt.png
Bildschirmfoto-Ausschnitt.png (2.84 KiB) 2018 mal betrachtet
Auf dem Mac erscheint der Inhalt eines QWidgets in meinem Hauptfenster über meinem centralWidget, obwohl davon nichts zu sehen sein sollte. Ich halte das Widget nur im Hintergrund vor, um es in einem QDockWidget anzuzeigen. Sobald ich es anzeigen lasse, verschwindet das Problem.

Code:
mainwindow.cpp:

Code: Alles auswählen

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    mwall_builder_dock_container = new QWidget(this);
    mwall_builder_dock_container_layout = new QGridLayout;
    mwall_builder_insert_walls = new QPushButton(tr("Insert walls"));
    mwall_builder_reset = new QPushButton(tr("Reset"));
    mwall_builder_dock_container_layout->addWidget(mwall_view, 0, 0, 1, -1);
    mwall_builder_dock_container_layout->addWidget(mwall_builder_insert_walls, 1, 0);
    mwall_builder_dock_container_layout->addWidget(mwall_builder_reset, 1, 1);
    mwall_builder_dock_container->setLayout(mwall_builder_dock_container_layout);

    mdock_widget = new QDockWidget(this);
    mdock_widget->setAllowedAreas(Qt::RightDockWidgetArea);
    mdock_widget->setWidget(mobj_template_view); // anderes Widget nach Start anzeigen lassen
}
Erst nachdem an anderer Stelle

Code: Alles auswählen

mdock_widget->setWidget(mwall_builder_dock_container);
aufgerufen wurde, verschwinden diese Artefakte. Das gleiche gilt für ein anderes Widget, das ähnlich konstruiert wird. Was kann ich tun, um das zu vermeiden?

Unter Linux gibt es kein derartiges Problem.

Re: Inhalt für QDockWidget erscheint verkrüppelt woanders

Verfasst: 6. April 2012 13:04
von franzf
Du erstellst halt dein mwall_builder_dock_container bereits im Konstrukto des MainWindow, mit diesem als parent. Das heißt beim ersten showEvent() wird das dock_container gleich angezeigt. Nur at es keine Größe und Position (weist du nicht selber zu, weder direkt oder indirekt durch ein Layout, wo das dock_container drinnen liegt).

Lösung:
dock_builder erst an der Stelle erstellen, wo du ihn auch zuweist.

Nebenbei:
Bist du irgendwie Namensfetischist? Ich hab beim ersten Mal lesen gleich wieder wegschauen müssen, wg. Kopfweh...
mwall_builder_dock_container_layout
mwall_builder_dock_container
Mit dem operator-> dahinter muss man extrem genau schauen, was da jetzt gerade verwendet wird. Kürzere Namen wären nicht schlecht. (Wenn die Namen wg. Unterscheidbarkeit notwendig sind, solltest du darüber nachdenken, den Krempel in eine eigene Klasse auszulagern).

Re: Inhalt für QDockWidget erscheint verkrüppelt woanders

Verfasst: 6. April 2012 19:23
von sieben
Müsste es dann nicht auch funktionieren, wenn ich dem mwall_builder_dock_container (also dem QWIdget) nicht das MainWindow als parent zuweise? Das ist nämlich merkwürdigerweise nicht der Fall, also das Problem tritt dann genauso auf. Hatte nämlich auch auf diese Erklärung getippt...

Ja, die Namen sind ein bisschen lang, das stimmt. Meine MainWindow Klasse ist auch recht groß. Es wäre sauberer, das auszulagern. Die anderen Widgets, die ins Dock-Widget gesetzt werden, sind auch ausgelagert. :roll: