Название: В qtSingleApplications не работает сигнал commitDataRequest(). Что делать? Отправлено: xintrea от Октябрь 21, 2014, 22:55 Я использую qtSingleApplications для того, чтобы программа на десктопе запускалась в одном экземпляре. Это обертка над QApplication (по сути просто класс QtSingleApplication, унаследованный от QApplication), в котором происходят проверки, не запущено ли еще одно такое же приложение.
Взять пропатченный qtSingleApplications для Qt5 можно тут: https://qt.gitorious.org/qt-solutions/lgeyers-qt-solutions/source/c50d0f3f142606b823f9106c7cd8b9a7d066e6ff: Для компиляции, возможно придется немного доработать: 1. В qtlocalpeer.cpp добавить #include <unistd.h> в условие #if defined(Q_OS_UNIX) 2. В qtsingleapplication.cpp закомментировать реализацию (она все равно не используется) QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type) : QApplication(argc, argv, type) { sysInit(); } И в qtsingleapplication.h закомментировать этот прототип. Создание объекта приложения происходит так же, как и при использовании обычного QApplication: Код: QtSingleApplication app(argc, argv); Так вот, мне, помимо всего прочего, надо ловить момент выхода из DE. Это делается через менеджер сессии: http://qt-project.org/doc/qt-5/session.html http://qt-project.org/doc/qt-5/qsessionmanager.html#allowsInteraction Для отлова момента выхода из DE, в основном окне устанавливается следующий сигнал и слот: Код: connect(qApp, SIGNAL(commitDataRequest(QSessionManager)), this, SLOT(commitData(QSessionManager))); Проблема в том, что при запуске программы появляется предупреждение: Код: QObject::connect: No such signal QtSingleApplication::commitDataRequest(QSessionManager) in ../mytetra/src/views/mainWindow/MainWindow.cpp:102 И естественно, обработки сигнала commitDataRequest не происходит. Вопрос: почему у QtSingleApplication нет сигнала commitDataRequest? Класс QtSingleApplication унаследован от QApplication, а QApplication унаследован от QGuiApplication, у которого в паблике есть сигнал commitDataRequest. В чем проблема, как исправить? Название: Re: В qtSingleApplications не работает сигнал commitDataRequest(). Что делать? Отправлено: xintrea от Октябрь 21, 2014, 23:56 На ЛОРе помогли.
В документации кривизна. Сказано, что: Код: connect(qApp, SIGNAL(commitDataRequest(QSessionManager)), SLOT(commitData(QSessionManager))); А надо: Код: connect(qApp, SIGNAL(commitDataRequest(QSessionManager&)), this, SLOT(commitData(QSessionManager&))); Название: Re: В qtSingleApplications не работает сигнал commitDataRequest(). Что делать? Отправлено: kambala от Октябрь 22, 2014, 00:09 в 5.3.1 в документации нет никакой кривизны. может просто сам амперсанд не заметил? :)
Название: Re: В qtSingleApplications не работает сигнал commitDataRequest(). Что делать? Отправлено: qate от Октябрь 22, 2014, 07:49 в qt5 стараюсь использовать новый синтаксис подключения слотов - тогда уже на этапе компиляции будет видна ошибка
|