Как изящно бросить QApplication в выпуске?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как изящно бросить QApplication в выпуске?

Сообщение Anonymous »

У меня есть приложение со значком области уведомления, поэтому главное окно может игнорировать событие Close. Я пытаюсь сохранить предпочтения и историю при выходе из приложения. Я также хочу обрабатывать журнал при запуске приложения. Несмотря на то, что приложение является кроссплатформенным, оно наиболее удобно/полезно в GNU/Linux, поэтому поведение Windows выходит на гораздо меньшую обеспокоенность. Управляющие окнами: < /p>

// main.cpp
# include
# include
# include
# include
# include

class M : public QMainWindow
{
Q_OBJECT
public:
~M();
public slots:
void onAboutToQuit();
private:
void closeEvent(QCloseEvent *);
};

M::~M()
{
std::cout

Я понятия не имею, почему onabouttoquit () присутствует в журнале, но m :: ~ m () в этом случае не ... < /p>

closeEvent()
onAboutToQuit()
{ Windows7 }
< /code> < /li>
< /ol>

3.

closeEvent()
{ icewm, E17 }
< /code>

4.


{ RazorQt, LxDE, LxQt, i3, budgie, fluxbox, awesome, openbox,
wmii, E16, pekWM, uwm, fvwm, xmonad, spectrwm, windowmaker,
herbstluftwm, WindowsXP }
< /code>

Поведение точно одинаково для любой комбинации (GCC 4.9.1 или Clang 3.4.2) и (QT 4.8.6 или QT 5.3.1). Однако, когда я попробовал QT 4.8 и QT 5.2 на Xubuntu, результаты были несколько иными: не было блокировки с QT 5.2 в XFCE - приложение закончилось изящно, независимо от видимости главного окна. Но блокирование присутствовало с QT 4.8 (так же, как в Manjaro). < /P>

Я знаю, что можно правильно обработать вход (без блокировки), потому что есть несколько приложений Это делает это просто отлично. Все они имеют значок зоны уведомления, закрыты для зоны уведомления, но не блокируйте регистрацию. Передача-QT, Kopete; < /li>
GTK на основе: aid исследовал исходный код Основанные на QT и не нашли ничего особенного для обработки BloseEvent: < /p>

https://github.com/goldendict/goldendic ... nwindow.cc

void MainWindow::closeEvent( QCloseEvent * ev )
{
if ( cfg.preferences.enableTrayIcon && cfg.preferences.closeToTray )
{
ev->ignore();
hide();
}
else
{
ev->accept();
qApp->quit();
}
}

https://github.com/bfleischer/transmiss ... mainwin.cc

void
TrMainWindow :: closeEvent( QCloseEvent * event )
{
// if they're using a tray icon, close to the tray
// instead of exiting
if( !myPrefs.getBool( Prefs :: SHOW_TRAY_ICON ) )
event->accept( );
else {
toggleWindows( false );
event->ignore( );
}
}

void
TrMainWindow :: toggleWindows( bool doShow )
{
if( !doShow )
{
hide( );
}
else
{
if ( !isVisible( ) ) show( );
if ( isMinimized( ) ) showNormal( );
//activateWindow( );
raise( );
QApplication::setActiveWindow( this );
}
}

git clone git://anongit.kde.org/kopete

void KopeteWindow::closeEvent ( QCloseEvent *e )
{
// if we are not ok to exit on close and we are not shutting down then just do what needs to be done if a
// window is closed.
KopeteApplication *app = static_cast ( kapp );
if ( !shouldExitOnClose() && !app->isShuttingDown() && !app->sessionSaving() ) {
// BEGIN of code borrowed from KMainWindow::closeEvent
// Save settings if auto-save is enabled, and settings have changed
if ( settingsDirty() && autoSaveSettings() )
saveAutoSaveSettings();

if ( queryClose() ) {
e->accept();
}
// END of code borrowed from KMainWindow::closeEvent
kDebug ( 14000 )


Как убедиться, что мое приложение Разве не блокируют регистрацию, даже если главное окно видно? настольные среды/управляющие окон возможно?

Подробнее здесь: https://stackoverflow.com/questions/251 ... -on-logout
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»