Уведомления
Очистить все
Добрый вечер! Начал работать с QML, достаточно быстро возникли вопросы 🙂
В проекте на C++ у меня обычно есть отдельный файл с константами const.h, который инклюдится везде, где требуются эти значения. Как можно получить доступ к этим переменным в QML? Очень не хочется создавать там аналогичные переменные-константы. Тогда при изменении в одном месте, придется менять уже в нескольких, весь смысл теряется 🙁
Создатель темы Размещено : 01.11.2021 20:09
Доброго времени суток!
Как вариант, через 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().
Возьму себе тоже на вооружение)
Размещено : 03.11.2021 11:39
@aveal отличное решение, мне идеально подходит, опробую на практике 🙂
Создатель темы Размещено : 03.11.2021 12:59