2009-08-17 18 views
5

Ich habe ein Dock-Widget, jetzt möchte ich ein "Window" -Menü hinzufügen, um das Widget ein-/auszublenden. Leicht genug, um mitQDockWidget ein-/ausblenden?

showPropWinAct = new QAction(tr("&Properties"), this); 
showPropWinAct->setStatusTip(tr("Show properties window")); 
showPropWinAct->setCheckable(true); 
connect(showPropWinAct, SIGNAL(toggled(bool)), propertiesWindow, SLOT(setVisible(bool))); 

zu tun Das Problem ist, wenn der Benutzer die [x] auf das Widget klickt, wird die showPropWinAct nicht umgeschaltet lassen. Wie kann ich auf dieses Ereignis hören und die Aktion richtig umschalten, ohne ein zweites setVisible-Signal abzufeuern (eines aus dem close-Ereignis und eines aus dem obigen connect)?

Antwort

21

Anstatt eine neue Aktion zu erstellen, rufen Sie einfach die Aktion vom QDockWidget selbst ab und verwenden Sie diese. Es wird für Sie kümmern sich um Zustand zu nehmen:

http://qt-project.org/doc/qt-4.8/qdockwidget.html#toggleViewAction

QAction * QDockWidget::toggleViewAction() const

„eine überprüfbare Aktion zurück, die verwendet werden können, um dieses Dock-Widget zu zeigen oder schließen

Der Text der Aktion gesetzt. zum Fenstertitel des Dock-Widgets. "

+1

Hah! Brillant. Ich wusste, dass es einen besseren Weg dafür geben musste. Ich danke dir sehr! :) – mpen

+1

Jeder Weg, dies im Designer zu tun? Momentan verwende ich nur 'void MainWindow :: on_dockWindow_visibilityChanged (bool sichtbar) {ui-> actionDockWindowToggle-> setChecked (sichtbar); } 'und dann' setShown() 'in der Aktion' on_toggled() 'slot. Es funktioniert gut genug und ist nur zwei Zeilen Code, aber wenn es eine Möglichkeit gibt, 'toggleViewAction()' im Designer zu verwenden, wäre das nett! – Timmmm

Verwandte Themen