Как записать событие нажатия кнопки закрытия QDockWidget

у меня есть QStackedWidgeт в течение QDockWidget — в зависимости от того, какая страница отображается, я хочу показать / скрыть кнопку закрытия на QDockWidget, Я могу сделать это с помощью QDockWidget::setFeatures(),

Однако проблема, с которой я сталкиваюсь, заключается в том, как захватить сигнал кнопки закрытия, чтобы я мог изменить функции док-станции / установить индекс страницы сложенного виджета.

Кнопка закрытия QDockWidget

Я попытался использовать фильтр событий:

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 );
}

И установил это так:

EventFilter* filter = new EventFilter( this );
u->dockWidget_6->installEventFilter( filter );

В конструкторе моего QMainWindoweventFilter() метод не вызывается.

Итак, затем я попытался использовать QDockWidget::visibilityChanged изменил сигнал, так как это звучало так, как я хотел:

connect( u->dockWidget_6, SIGNAL(visibilityChanged(bool)), SLOT(dockWindowClosed(bool)) );

Этот слот действительно вызывался — но не при нажатии кнопки закрытия.

Наконец я попытался использовать повышенный QDockWidget захватить 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();
}
};

Я видел, что был вызван конструктор, что означает, что этот новый виджет действительно использовался, но опять же никакой радости, так как closeEvent() никогда не вызывался при нажатии кнопки закрытия.

7

Решение

Оказывается, что все, кроме visibilityChanged сигнал работает!

Я добавил сигнал в переопределенный closeEvent() метод, который я мог бы затем подключить к любому слоту, который я хотел.

Фактическая проблема заключалась в том, что в сложенном виджете у меня был другой QDockWidget на другой странице, следовательно, я добавлял все это неправильно QDockWidget! (И конечно добавлять неправильно QDockWidget тоже дох!).

Надеемся, что этот вопрос может послужить ссылкой на кого-то еще, кто должен выяснить, как это сделать, а не почему он не работает.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]