Доброго вечора, любі друзі українці та усі інші!
Спробую зачинити це питання.
Добре написана програма повинна добре зачинятися при завершенні сеансу. Для цього у Qt є клас
QSessionManager. Достукатися до нього ми можемо через віртуальні функції:
QApplication::commitData( QSessionManager & ) та
QApplication::saveState( QSessionManager & ). Під Windows працєю тільки перша віртуальна функція, бо у ньому немає
реального менеджера сесій.
class MyApplication : public QApplication
{
...
void commitData( QSessionManager & sm );
...
};
...
void MyApplication::commitData( QSessionManager & sm )
{
if ( not_need_to_ask_user )
{
// програма може сама завершитися без втручання
sm.release(); // даємо менеджеру можливість опитати інші програми сеансу, доки будемо сейвитися
save_my_data();
}
else
{
// треба запитати у користувача, а чи дійсно він бажає завершувати сеанс
if ( sm.allowsInteraction() )
{
// ми маємо змогу запитати
int ret = QMessageBox::question( 0, "my program", "document not saved, save it?", QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel );
if ( ret == QMessageBox::No )
return;
if ( ret == QMessageBox::Yes )
{
sm.release();
save_my_document();
return;
}
// ret == QMessageBox::Cancel, припиняємо завершення сеансу, працюємо далі
sm.cancel();
}
else
{
// запитати ми неможемо, вимикаємося терміново
sm.release();
save_my_temp_document();
}
}
}
...
int main( int argc, char ** argv )
{
MyApplication app( argc, argv );
...
return app.exec();
}
Це тільки приклад
Усім читати доку по
QSessionManager та
Session Management.