2009-08-17 17 views
5

Ho un widget dock, ora voglio aggiungere un menu "Finestra" per mostrare/nascondere il widget. abbastanza facile da fare conMostra/nascondi QDockWidget?

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

Il problema è quando l'utente fa clic sul [x] sul widget, il showPropWinAct non ottiene attivata. Come posso ascoltare questo evento e attivare correttamente l'azione, senza attivare un secondo segnale setVisible (presumibilmente uno dall'evento close e uno dallo connect precedente)?

risposta

21

Invece di creare una nuova azione, è sufficiente ottenere l'azione dal QDockWidget stesso e utilizzarla. Si prenderà cura di Stato per voi:

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

QAction * QDockWidget::toggleViewAction() const

"restituisce un'azione controllabile che può essere utilizzato per visualizzare o chiudere questo widget dock

Il testo della azione è impostata. al titolo della finestra del widget del dock "

+1

Hah! Brillante. Sapeva che ci doveva essere un modo migliore per farlo. Grazie mille! :) – mpen

+1

Un modo per farlo nel designer? Attualmente uso solo 'void MainWindow :: on_dockWindow_visibilityChanged (bool visibile) {ui-> actionDockWindowToggle-> setChecked (visibile); } 'e quindi' setShown() 'nello slot' on_toggled() '. Funziona abbastanza bene e sono solo due righe di codice, ma se c'è un modo per usare 'toggleViewAction()' nel designer sarebbe bello! – Timmmm