bool DialogCallbacks::eventFilter(QObject *object, QEvent *event) { if (event->type() == QEvent::Close) { int index = m_view->metaObject()->indexOfMethod("dialogCanClose()"); if (index != -1) { QVariant returnedValue; returnedValue.setValue<bool>(true); QMetaMethod metaMethod = m_view->metaObject()->method(index); metaMethod.invoke(m_view, Q_RETURN_ARG(QVariant, returnedValue)); if (!returnedValue.toBool()) { event->ignore(); return true; } } QMainWindow* mainWindow = qobject_cast<QMainWindow*>(object); if (mainWindow) mainWindowGeometry = mainWindow->saveGeometry(); } return false; }