Ho un QStackedWidge
t all'interno di un QDockWidget
- a seconda di quale pagina è indicata desidero mostrare/nascondere il pulsante di chiusura sul QDockWidget
. Posso farlo usando QDockWidget::setFeatures()
.Come catturare l'evento QDockWidget pulsante di chiusura click
Tuttavia il problema che sto affrontando è come catturare il segnale del pulsante di chiusura in modo da poter modificare le caratteristiche del dock/impostare l'indice della pagina del widget impilato.
ho tentato di usare un filtro eventi:
class EventFilter : public QObject
{
Q_OBJECT
public:
EventFilter(QObject* aParent);
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
EventFilter::EventFilter(QObject* aParent)
: QObject(aParent)
{
}
bool EventFilter::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::Close)
{
return true;
}
return QObject::eventFilter(obj, event);
}
e installato come così:
EventFilter* filter = new EventFilter(this);
u->dockWidget_6->installEventFilter(filter);
Nel costruttore della mia QMainWindow
- il metodo eventFilter()
non ha fatto essere chiamato
Così la prossima ho cercato di utilizzare il segnale modificato QDockWidget::visibilityChanged
in quanto sembrava che questo potrebbe essere quello che volevo:
connect(u->dockWidget_6, SIGNAL(visibilityChanged(bool)), SLOT(dockWindowClosed(bool)));
Questo slot fatto ottenere chiamato - ma non quando il pulsante di chiusura è stato cliccato.
Infine, ho tentato di utilizzare un codice promozionale QDockWidget
per acquisire lo QWidget::closeEvent()
.
class DockWidgetWithCloseSignal : public QDockWidget
{
Q_OBJECT
public:
explicit DockWidgetWithCloseSignal(const QString &title, QWidget *parent = 0, Qt::WindowFlags flags = 0)
: QDockWidget(title, parent, flags)
{
}
explicit DockWidgetWithCloseSignal(QWidget *parent = 0, Qt::WindowFlags flags = 0)
: QDockWidget(parent, flags)
{
}
protected:
void closeEvent(QCloseEvent *event)
{
event->ignore();
}
};
ho visto il costruttore è stato chiamato il che significa che questo nuovo widget è stato effettivamente utilizzato, ma ancora nessuna gioia dal momento che il closeEvent()
non è mai stato chiamato quando il pulsante di chiusura è stato cliccato.
Ho usato il segnale QObject :: destroyed() come descritto in http://stackoverflow.com/questions/7091830/qt-destructor-call-for-closed-widget – vrogach