Вольдемар
Новичок
Offline
Сообщений: 4
|
|
« : Март 29, 2021, 20:45 » |
|
извиняюсь за много букв ниже.
отслеживание закрытия окна(приложения) не работает (у меня) когда убираю рамку окна..
есть дефолтное MainWindow w; со скрытой рамкой w.setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
окно закрываю на тулбаре QToolBar *toolbar=new QToolBar("main toolbar"); QAction *quit = toolbar->addAction(QIcon(quitpix), "Quit Application"); QObject::connect(quit, &QAction::triggered, qApp, &QApplication::quit); w.addToolBar(Qt::TopToolBarArea,toolbar);
при закрытии окна(завершении приложения) выполняю какое-то действие (а именно запись неких данных в QSettings функцией writeLog() ) из кастомного класса.
отслеживаю закрытие окна(приложения) так:
вариант 1: class customClass{ ... writeLog();//записываю лог в файл ... // связываю экшн тулбара так-же с моим слотом записи лога QObject::connect(quit, &QAction::triggered, qApp, &QApplication::quit); QObject::connect(quit, &QAction::triggered, this, &сustomClass::WriteLogSlot);//не работает ... public slots: void writeLogSlot(){ writeLog(); }
вариант2: в том же кастомном классе QObject::connect(qApp, &QApplication::destroyed, this, &customClass::WriteLogSlot); или QObject::connect( qApp, &QApplication::aboutToQuit, this, &customClass::WriteLogSlot); то же не работает
вариант3: работает только если закрываю окно кнопкой [х] в MainWindow класс кидаю signal: WriteLogSignal() и связываю со слотом кастомного класса QObject::connect( &w, &MainWindow::WriteLogSignal, this, &customClass::WriteLogSlot); определяю CloseEvent в MainWindow: protected: void closeEvent(QCloseEvent *event){ // event->ignore(); emit WriteLogSignal(); // event->accept(); }
вариант4: не работает .... w->installEventFilter(this); ... protected: bool eventFilter(QObject *obj, QEvent *event) { if (obj == w) { QEvent::Type type = event->type(); if (type == QEvent::Quit) { writeLog(); } } return QWidget::eventFilter(obj, event); }
upd впрочем я неверно выразился, CloseEvent для MainWindow срабатывает если закрыть окно нажав на |x| а если вызываю слот QApplication::quit то нет
|