[gelöst] QDockWidget schließen

Alles rund um die Programmierung mit Qt
Antworten
maddin456
Beiträge: 2
Registriert: 1. April 2010 16:39

[gelöst] QDockWidget schließen

Beitrag 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
Zuletzt geändert von maddin456 am 1. April 2010 20:31, insgesamt 1-mal geändert.
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Das gibt es fix und fertig:

Code: Alles auswählen

QAction * QDockWidget::toggleViewAction () const
maddin456
Beiträge: 2
Registriert: 1. April 2010 16:39

Beitrag 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);
Antworten