J'ai un QStackedWidge
t dans un QDockWidget
- en fonction de quelle page est affichée Je souhaite afficher/masquer le bouton de fermeture sur le QDockWidget
. Je peux le faire en utilisant QDockWidget::setFeatures()
.Comment capturer l'événement de clic de bouton de fermeture QDockWidget
Cependant, le problème auquel je suis confronté est de savoir comment capturer le signal du bouton de fermeture afin de pouvoir modifier les fonctionnalités de la station d'accueil/définir l'index de la page du widget empilé.
J'ai essayé d'utiliser un filtre d'événement:
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);
}
et installé comme ceci:
EventFilter* filter = new EventFilter(this);
u->dockWidget_6->installEventFilter(filter);
Dans le constructeur de mon QMainWindow
- la méthode eventFilter()
n'a pas être appelé.
Alors, la prochaine je tentais d'utiliser le signal modifié QDockWidget::visibilityChanged
car il semblait que cela pourrait être ce que je voulais:
connect(u->dockWidget_6, SIGNAL(visibilityChanged(bool)), SLOT(dockWindowClosed(bool)));
Cet emplacement se fait appelé - mais pas lorsque le bouton de fermeture a été cliqué.
Enfin, j'ai tenté d'utiliser un QDockWidget
promu pour capturer le 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();
}
};
je vis le constructeur a été appelé ce qui signifie que ce nouveau widget est utilisé en effet, mais encore une fois pas de joie depuis le closeEvent()
n'a jamais été appelé lorsque le bouton de fermeture a été cliqué.
J'ai utilisé le signal QObject :: destroyed() comme décrit dans http://stackoverflow.com/questions/7091830/qt-destructor-call-for-closed-widget – vrogach