Ich habe eine QStackedWidge
t innerhalb einer QDockWidget
- je nachdem, welche Seite angezeigt wird, ich möchte die Schließen-Schaltfläche auf dem QDockWidget
zeigen/verbergen. Ich kann dies tun, indem Sie QDockWidget::setFeatures()
verwenden.So erfassen Sie das QDockWidget Schließen Sie die Schaltfläche click event
Aber das Problem, das mir gegenübersteht, ist, wie man das Signal der Schließen-Schaltfläche erfasst, so dass ich die Dock-Funktionen ändern/den gestapelten Widget-Seitenindex einstellen kann.
Ich habe versucht, einen Ereignisfilter zu verwenden:
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);
}
und installiert es als so:
EventFilter* filter = new EventFilter(this);
u->dockWidget_6->installEventFilter(filter);
Im Konstruktor meines QMainWindow
- die eventFilter()
Methode nicht tat gerufen werden.
Also die nächst ich versuchte, das QDockWidget::visibilityChanged
geänderte Signal zu verwenden, da es so klang sein könnte, was ich wollte:
connect(u->dockWidget_6, SIGNAL(visibilityChanged(bool)), SLOT(dockWindowClosed(bool)));
Dieser Schlitz hat aufgerufen - aber nicht, wenn die Schließen-Schaltfläche geklickt wurde.
Schließlich habe ich versucht, einen Promoter QDockWidget
zu verwenden, um die QWidget::closeEvent()
zu erfassen.
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();
}
};
sah ich den Konstruktor wurde aufgerufen, die diese neue Widget bedeutet in der Tat verwendet wurde, aber wieder keine Freude, da die closeEvent()
nie, wenn die Schließen-Schaltfläche geklickt wurde, genannt.
Ich habe QObject :: destroy() -Signal wie in http://stackoverflow.com/questions/7091830/qt-destructor-call-for-closed-widget beschrieben verwendet – vrogach