Mam QStackedWidge
t w obrębie - w zależności od tego, która strona jest wyświetlana Chcę pokazać/ukryć przycisk zamykania na QDockWidget
. Mogę to zrobić za pomocą QDockWidget::setFeatures()
.Jak przechwycić zdarzenie zamykania przycisku QDockWidget kliknij przycisk
Jednak problemem, przed którym stoję, jest przechwytywanie sygnału przycisku zamykania, aby można było zmienić funkcje dokowania/ustawić indeks ułożonych stron widżetów.
próbowałem użyć filtra zdarzeń:
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);
}
i zainstalowany jako tak:
EventFilter* filter = new EventFilter(this);
u->dockWidget_6->installEventFilter(filter);
W konstruktorze mojego QMainWindow
- metody eventFilter()
nie zostać wezwanym.
Więc następnym próbowałem użyć QDockWidget::visibilityChanged
zmieniony sygnał, ponieważ brzmiało to jak to może być to, co chciałem:
connect(u->dockWidget_6, SIGNAL(visibilityChanged(bool)), SLOT(dockWindowClosed(bool)));
Gniazdo to nie nazywa się - ale nie wtedy, gdy w pobliżu przycisk został kliknięty.
W końcu próbowałem użyć promowanego QDockWidget
do przechwytywania 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();
}
};
Widziałem konstruktor nazwano co oznacza ten nowy widżet był rzeczywiście używany, ale znowu nie radość od closeEvent()
nigdy nie nazwano po blisko przycisk został kliknięty.
Użyłem sygnału QObject :: destroyed() zgodnie z opisem w http://stackoverflow.com/questions/7091830/qt-destructor-call-for-closed-widget – vrogach