Seite 1 von 1

[gelöst] QDockWidget schließen

Verfasst: 1. April 2010 16:52
von maddin456
Hallo miteinander,

ich habe mir mit dem Designer eine kleine GUI zusammengeklickt. Die besteht aus mehreren DockWidgets, die ausgedockt, irgendwo anders eingedockt und auch geschlossen werden können.
In einem Menüpunkt möchte ich die Dockwidgets deaktivieren können. Die nötigen Actions dazu habe ich angelegt und erfolgreich getestet:

Code: Alles auswählen

void MainWindow::on_actionScripting_toggled(bool checked)
{
    if (checked)
         ui->dockWidget_Scripting->show();
    else
       ui->dockWidget_Scripting->hide();
}


Wenn man die Dockwidgets selbst (mit dem X) schließt, bekommt das der Menüpunkt nicht mit. Leider finde ich dafür kein passendes Signal, dass ich abfragen könnte.
VisibilityChanged geht nicht, da das auch getriggert wird, wenn ich 2 DockWidgets ineinander docke:

Code: Alles auswählen

void MainWindow::on_dockWidget_DeviceSelection_visibilityChanged(bool visible)
{
     if (visible)
       ui->actionDevice_Selection->setChecked(true);
    else
       ui->actionDevice_Selection->setChecked(false);
}

Bin die Doku rauf und runter gegangen. Habe ich da was überstehen?

Gruß

Martin

Verfasst: 1. April 2010 17:21
von otternase
Hi

1) ich bin mir nicht ganz sicher, ob ich Deine Frage richtig verstanden habe, daher erstmal einen Gegenfrage: soll der Nutzer die DockWidgets mit dem "X" wirklich schliessen dürfen oder nur verstecken und wiederhervorholen dürfen über Deine Checkboxes? Close und Hide sind ja zwei unterschiedliche Sachen? Und was passiert im Ablauf, wennn der Nutzer das Widget geschlossen hat und dann über die Checkbox wieder aufruft?
Soll das Schliessen der DockWidgets unterbunden werden, so wäre dafür QDockWidget::setFeatures (QDockWidget::DockWidgetMovable | QDockWidget::DockWidgetFloatable) zuständig, wobei eben QDockWidget::DockWidgetClosable nicht gesetzt werden dürfte.

2) soll hingegen wirklich das Signal des Schliessens abgeprüft werden, so würde ich mir mal void QObject::void destroyed ( QObject * obj = 0 ) anschauen

Verfasst: 1. April 2010 17:23
von upsala
Das gibt es fix und fertig:

Code: Alles auswählen

QAction * QDockWidget::toggleViewAction () const

Verfasst: 1. April 2010 20:31
von maddin456
danke für eure Antworten:

@ Otternase: stimmt, ich wollte eigentlich nur verstecken und nciht schließen - denkfehler meinerseits!

@upsala:

danke für den Tip: damit geht das ja so richtig elegant einfach:

Code: Alles auswählen

    QMenu *windowMenu = new QMenu("Window", this);
    windowMenu->addAction( ui->dockWidget_DeviceSelection->toggleViewAction());
    windowMenu->addAction( ui->dockWidget_Output->toggleViewAction());
    windowMenu->addAction( ui->dockWidget_Scripting->toggleViewAction());
    ui->menuBar->addMenu(windowMenu);