2017-01-27 2 views
1

Я developping приложения с помощью Qt4.8, на CentOS6.3Как выполнить «подтвердить» диалог менеджера гнома сеанса из приложения Qt, когда выход из системы гнома сессии (без использования QSessionManager)

Normaly, когда я выполняю " logout "при запуске приложения, Как бы то ни было, приложение завершено и сеанс выходит из системы. Как я могу это сделать, чтобы разрешить диспетчер сеанса Gnome подтвердить завершение, или не разрешить выход из системы (и завершение приложения) до тех пор, пока не будет завершена обработка, заявленная приложением.

Для меня в качестве предпочтительного приоритета являются следующие

  1. Менеджер сеанса справки о конце сеанса
  2. обработка Выход (обработка завершения сеанса) не выполняется, до выхода на стороне приложения

Я пробовал следующее, но ни одно из предполагаемых действий (сдерживание выхода из системы). Приложение прекращено, так как оно выполняется с выходом.

  • Ловушка SIGHUP и SIGTERM и выполняются при (1) в обработчике сигнала.
  • Ловушка SIGHUP и SIGTERM и внутри обработчика сигнала генерируют QMessageBox со значением «Вы действительно хотите уйти?» И запустите exec(), чтобы остановить процесс основного потока процесса завершения.
  • Заменить closeEvent() главного виджета приложения (QWidget), создать QMessageBox со значением «Вы действительно хотите выйти?» И запустить exec(), чтобы остановить процесс основного потока процесса завершения.

пример кода я попытался:

void Widget::closeEvent(QCloseEvent *event) 
{ 
    int ret = QMessageBox::warning(
         this, 
         tr("My Application"), 
         tr("Do you want to logout?"), 
         QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel); 
    QWidget::closeEvent(event); 
} 

Я нашел информацию, что Qt имеет API под названием QSessionManager, и попытался попробовать, QSessionManager и все процессы, связанные с ней аннулируются в configureed/построенная библиотека, Я не мог использовать ее.

+0

После повторного чтения вашего комментария к моему ответу, не так ли, что вы хотите реализовать функциональность, предоставленную 'QSessionManager', но не можете использовать' QSessionManager'? –

+0

Я не могу использовать 'QSessionManager'. 'QSessionManager', похоже, сконфигурирован/создан как пустой класс кода в моей библиотеке. – taki

ответ

1

Вы можете вызвать диалог GNOME с помощью gnome-session-quit. Если вы хотите использовать API D-Bus для этого, source вышеуказанной утилиты должен быть в состоянии провести вас.

+0

Спасибо за совет. Что я хочу сделать, это не запускать «выход из системы» приложением. Во время выполнения приложения, когда пользователь выполняет операцию выхода на рабочий стол, приложения прекращаются с помощью gnome-session-save. Я хочу реализовать код в приложении Qt, чтобы предотвратить это, и вызвать диалог подтверждения продолжения выхода из системы или прервать обработку выхода, пока приложение не завершится. Нужно ли мне обращаться к API D-BUS из приложения Qt? – taki

Смежные вопросы