Russian Qt Forum
Ноябрь 22, 2024, 21:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: отследить закрытие окна(приложения) с убранной рамкой  (Прочитано 1554 раз)
Вольдемар
Новичок

Offline 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 то нет
« Последнее редактирование: Март 30, 2021, 00:42 от Вольдемар » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.059 секунд. Запросов: 22.