![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
silver47 |
![]()
Сообщение
#1
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
Приложение пишет лог в файл. Необходимо чтобы при закрытии приложения, собственно, этот лог сохранился. Не могу отловить событие закрытия
. Деструктор тоже не выполняется. Может кто может помочь?Спасибо. |
|
|
![]() |
abc |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
окну нужно присвоить флаг deleteOnClose, вроде так пишется, тогда деструктор выполнится
ещё closeEvent - у твоего главного окна есть такая виртуальная функция а ещё стоит сохранять лог периодически, потому что программа может завершиться аварийно не вижу ничего плохого в том, чтобы с каждой записью открывать и закрывать файл |
|
|
silver47 |
![]()
Сообщение
#3
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
окну нужно присвоить флаг deleteOnClose, вроде так пишется, тогда деструктор выполнится ещё closeEvent - у твоего главного окна есть такая виртуальная функция а ещё стоит сохранять лог периодически, потому что программа может завершиться аварийно не вижу ничего плохого в том, чтобы с каждой записью открывать и закрывать файл По поводу того, чтобы с каждой записью открывать и закрывать файл, сам только подумал и переделал уже. А вот про deleteOnClose, как присвоить его окну? |
|
|
wiz29 |
![]()
Сообщение
#4
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: ![]() ![]() ![]() |
QWidget* pWidget(new QWidget);
pWidget->setAttribute (Qt::WA_DeleteOnClose, true); раз у тебя оконное приложение попробуй обработать сигнал от QApplication : void lastWindowClosed (). |
|
|
silver47 |
![]()
Сообщение
#5
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
QWidget* pWidget(new QWidget); pWidget->setAttribute (Qt::WA_DeleteOnClose, true); раз у тебя оконное приложение попробуй обработать сигнал от QApplication : void lastWindowClosed (). У меня оно не наследуется от QWidget. У меня нет окон - нечего закрывать. Пока сделал так, чтобы файл с логом был всегда закрыт. открывается лишь на незначительное время для добавления записи, для решения задачи этого вполне достаточно. Но может все-же можно как-то понять, что твое приложение закрыли тем или иным образом? Вроде встречал на каком-то форуме, что платформонезависимо нельзя, но это касается только консольных приложений. Сообщение отредактировал silver47 - 5.4.2011, 11:17 |
|
|
wiz29 |
![]()
Сообщение
#6
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: ![]() ![]() ![]() |
можешь линкануть код функции main?
просто в любом случае одной обработкой сигнала от QCoreApplication нельзя отделаться. |
|
|
silver47 |
![]()
Сообщение
#7
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
можешь линкануть код функции main? main, в моем случае не делает ничего, кроме создания экземпляра класса и запуска лупа.
|
|
|
wiz29 |
![]()
Сообщение
#8
|
![]() Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 600 Регистрация: 7.7.2010 Из: Санкт-Петербург Пользователь №: 1866 Спасибо сказали: 94 раз(а) Репутация: ![]() ![]() ![]() |
объект "logger" синглтон в приложении?
если это так то все просто нужно немного модифицировать код твоего main и все будет в "шоколаде". строку return a.exec(); поменяй на 2:
и вначале обязательно сделай переопределение стандартного обработчика "terminate handler function", это поможет тебе при завершении логера в случае непредвиденного завершения приложения. инфу можно посмотреть тут http://www.cplusplus.com/reference/std/exc.../set_terminate/ Сообщение отредактировал wiz29 - 5.4.2011, 11:45 |
|
|
silver47 |
![]()
Сообщение
#9
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 356 Регистрация: 1.4.2010 Пользователь №: 1584 Спасибо сказали: 40 раз(а) Репутация: ![]() ![]() ![]() |
объект "logger" синглтон в приложении? если это так то все просто нужно немного модифицировать код твоего main и все будет в "шоколаде". строку return a.exec(); поменяй на 2:
и вначале обязательно сделай переопределение стандартного обработчика "terminate handler function", это поможет тебе при завершении логера в случае непредвиденного завершения приложения. инфу можно посмотреть тут http://www.cplusplus.com/reference/std/exc.../set_terminate/ Простите. Совсем не понял. Объект "логгер" пишет в файл события, которые происходят при обработке данных другими классами, они кидают ему их посредством сигналов. Другие классы должны выполняться в лупе, то есть всегда, это не парсер чего-либо. Если они выполнили свою работу они уничтожаются, родительский класс создает новый объект, как только работа появиться. Надеюсь понятно объяснил. |
|
|
abc |
![]()
Сообщение
#10
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 221 Регистрация: 16.12.2010 Из: СПб Пользователь №: 2272 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
Wiz,
имеешь ввиду?
про terminate только на днях прочёл, оказывается, вот где можно использовать) |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 22.6.2025, 9:58 |