Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дополнительные материалы.pdf
Скачиваний:
3
Добавлен:
07.06.2025
Размер:
12.29 Mб
Скачать

РАЗРАБОТКА ПО ДЛЯ ОС АВРОРА

Запуск приложения без GUI

Работа в фоновом режиме реализуется с помощью сервиса DBus

Название сервиса, путь и интерфейс можно задать как константы в pro-файле: DEFINES += \

DBUS_SERVICE=\\\"ru.omp.PushReceiver\\\" \ DBUS_PATH=\\\"/ru/omp/PushReceiver\\\" \ DBUS_INTERFACE=\\\"ru.omp.PushReceiver\\\" \

Эти константы экспортируются в С++-код

const QString dbusServiceStr = QStringLiteral(DBUS_SERVICE); const QString dbusPathStr = QStringLiteral(DBUS_PATH); const QString dbusIfaceStr = QStringLiteral(DBUS_INTERFACE);

const QString dbusMethodAppArgs = QStringLiteral("handleApplicationArgs");

РАЗРАБОТКА ПО ДЛЯ ОС АВРОРА

Создание сервиса

Для управления приложением создаётся класс ApplicationService, наследник QDBusAbstractAdaptor

В конструкторе регистрируется D-Bus-сервис: ApplicationService::ApplicationService(QObject *parent) : QDBusAbstractAdaptor(parent)

{

setAutoRelaySignals(true);

auto dbus = QDBusConnection::sessionBus(); dbus.registerObject(dbusPathStr, this, QDBusConnection::ExportAllSlots); if (!isRegistered()) {

bool success = dbus.registerService(dbusServiceStr); if (!success)

qApp->quit();

}

}

РАЗРАБОТКА ПО ДЛЯ ОС АВРОРА

Управление аргументами командной строки

int ApplicationService::updateApplicationArgs(const QStringList &arguments)

{

auto message = QDBusMessage::createMethodCall(dbusServiceStr, dbusPathStr, dbusIfaceStr, dbusMethodAppArgs);

message.setArguments(QList<QVariant>() << arguments); auto reply = QDBusConnection::sessionBus().call(message); return 0;

}

void ApplicationService::handleApplicationArgs(const QStringList &arguments)

{

if (arguments.indexOf(QStringLiteral("/no-gui")) != -1) return;

emit showGui();

}

РАЗРАБОТКА ПО ДЛЯ ОС АВРОРА

Запуск приложения

int main(int argc, char *argv[])

{

auto application = SailfishApp::application(argc, argv); application->setOrganizationName(QStringLiteral("ru.omp")); application->setApplicationName(QStringLiteral("PushReceiver")); auto applicationArgs = application->arguments(); applicationArgs.removeFirst();

if (ApplicationService::isRegistered()) {

return ApplicationService::updateApplicationArgs(applicationArgs); } else {

auto applicationService = new ApplicationService(application);

auto applicationController = new ApplicationController(applicationArgs, application); QObject::connect(applicationService, &ApplicationService::showGui,

applicationController, &ApplicationController::showGui); return application->exec();

}

}