Files
BiLauncher/doc/cpp/main.md
T
2026-10-11 22:32:13 +03:00

3.0 KiB
Raw Blame History

main.cpp

Точка входа. Объектов предметной области здесь нет: LauncherBackend создаёт сам Main.qml, а 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.
  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).
  7. Стиль Basic. Окна оформлены вручную, а нативный стиль Windows игнорирует свои contentItem и background и засыпает журнал предупреждениями.
  8. Движок. QQmlApplicationEngine. Если корневой объект не создался, приложение завершается с -1. Соединение отложенное (Qt::QueuedConnection), чтобы выход произошёл уже в цикле событий, а не посреди загрузки.
  9. engine.loadFromModule("BiLauncher", "Main") — загрузка по URI модуля и имени типа.
  10. app.exec().

Аргументы командной строки не разбираются. Контекстных свойств нет: QML общается с C++ только через зарегистрированные типы LauncherBackend и Loc.


При создании этого документа использовался ИИ.