Добрый вечер! Начал работать с QML, достаточно быстро возникли вопросы 🙂
В проекте на C++ у меня обычно есть отдельный файл с константами const.h, который инклюдится везде, где требуются эти значения. Как можно получить доступ к этим переменным в QML? Очень не хочется создавать там аналогичные переменные-константы. Тогда при изменении в одном месте, придется менять уже в нескольких, весь смысл теряется 🙁
Доброго времени суток!
Как вариант, через setContextProperty(). Допустим, константы в constants.h:
#ifndef CONSTANTS_H #define CONSTANTS_H namespace constants { inline constexpr double myConstant = 800; } #endif // CONSTANTS_H
В main():
QGuiApplication app(argc, argv); QQmlApplicationEngine engine; const QUrl url(QStringLiteral("qrc:/qml/main.qml")); QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &app, [url](QObject *obj, const QUrl &objUrl) { if (!obj && url == objUrl) QCoreApplication::exit(-1); }, Qt::QueuedConnection); engine.load(url); engine.rootContext()->setContextProperty("myConstant", constants::myConstant);
Здесь я добавил строку:
engine.rootContext()->setContextProperty("myConstant", constants::myConstant);
Теперь в qml спокойно используем:
W.Window { id: window width: W.Screen.width height: myConstant visible: true // .............................
Как вариант, через setContextProperty().
Возьму себе тоже на вооружение)
@aveal отличное решение, мне идеально подходит, опробую на практике 🙂