37 lines
3.0 KiB
Markdown
37 lines
3.0 KiB
Markdown
# main.cpp
|
||
|
||
Точка входа. Объектов предметной области здесь нет: `LauncherBackend` создаёт сам
|
||
[Main.qml](../qml/Main.md), а `main()` только готовит приложение и загружает QML.
|
||
|
||
## По порядку
|
||
|
||
1. **WebEngine.** Если лаунчер собран с Qt WebEngine (`LAUNCHER_HAS_WEBENGINE`),
|
||
`QtWebEngineQuick::initialize()` вызывается до создания `QGuiApplication`. После создания
|
||
приложения общий контекст OpenGL уже не выставить.
|
||
2. **`QGuiApplication`**, а не `QApplication`: виджетов в проекте нет.
|
||
3. **Имя и версия.** `applicationName` = `BiLauncher`, `applicationVersion` = `LAUNCHER_VERSION`
|
||
(берётся из `project(... VERSION)` в CMake), организация `GaleonDev`, домен `galeonworx.com`. На
|
||
пути к данным лаунчера это не влияет, см. [launcherpaths.h](launcherpaths.md).
|
||
4. **Иконка окна.** На Windows и Linux в `QIcon` складываются все PNG из ресурса `:/icons/`
|
||
(16–512 и `@2x`). На macOS этот шаг пропущен: там иконку берут из `icon.icns` внутри бандла.
|
||
5. **`setDesktopFileName("bilauncher")`.** По этому имени окружения рабочего стола в Linux
|
||
связывают окно с `bilauncher.desktop` и показывают правильную иконку в панели.
|
||
6. **Тексты.** `Localization::instance().load()` читает `i18n/translations.json` и язык из
|
||
`settings.json`. Это нужно сделать до создания движка: язык должен быть известен до первой
|
||
привязки. Если каталог не загрузился, `main()` возвращает `-1` (см.
|
||
[Localization](Localization.md)).
|
||
7. **Стиль `Basic`.** Окна оформлены вручную, а нативный стиль Windows игнорирует свои
|
||
`contentItem` и `background` и засыпает журнал предупреждениями.
|
||
8. **Движок.** `QQmlApplicationEngine`. Если корневой объект не создался, приложение
|
||
завершается с `-1`. Соединение отложенное (`Qt::QueuedConnection`), чтобы выход произошёл уже в
|
||
цикле событий, а не посреди загрузки.
|
||
9. `engine.loadFromModule("BiLauncher", "Main")` — загрузка по URI модуля и имени типа.
|
||
10. `app.exec()`.
|
||
|
||
Аргументы командной строки не разбираются. Контекстных свойств нет: QML общается с C++ только
|
||
через зарегистрированные типы `LauncherBackend` и `Loc`.
|
||
|
||
---
|
||
|
||
При создании этого документа использовался ИИ.
|