Files
BiLauncher/doc/cpp/main.md
T
galeon 1d781b5324
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / macos (push) Successful in 1m20s
tests / linux (push) Successful in 2m14s
tests / windows (push) Failing after 23m21s
fix #23 by adding validating on first startup and close #30 by adding
version number

Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-23 09:55:15 +03:00

3.1 KiB
Raw Permalink 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 (в CMake это PROJECT_VERSION плюс LAUNCHER_VERSION_SUFFIX, например 1.0.1-dev; QML читает её через Qt.application.version), организация 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.


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