Inhalt für QDockWidget erscheint verkrüppelt woanders

Alles rund um die Programmierung mit Qt
Antworten
sieben
Beiträge: 10
Registriert: 18. Juni 2009 08:45

Inhalt für QDockWidget erscheint verkrüppelt woanders

Beitrag von sieben »

Hallo liebe QT-Community,
folgendes Problem:
Bildschirmfoto-Ausschnitt.png
Bildschirmfoto-Ausschnitt.png (2.84 KiB) 2019 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.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

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

Beitrag 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).
sieben
Beiträge: 10
Registriert: 18. Juni 2009 08:45

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

Beitrag 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:
Antworten