Top.Mail.Ru
Уведомления
Очистить все

[Решено] Передать данные из C++ в QML.

Drown
(@drown)
New member

Добрый вечер! Начал работать с QML, достаточно быстро возникли вопросы 🙂

В проекте на C++ у меня обычно есть отдельный файл с константами const.h, который инклюдится везде, где требуются эти значения. Как можно получить доступ к этим переменным в QML? Очень не хочется создавать там аналогичные переменные-константы. Тогда при изменении в одном месте, придется менять уже в нескольких, весь смысл теряется 🙁 

Цитата
Создатель темы Размещено : 01.11.2021 20:09
Метки темы
Aveal
(@aveal)
Top level Admin

Доброго времени суток!

Как вариант, через 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
// .............................

 

ОтветитьЦитата
Размещено : 02.11.2021 18:05
Drown and AI reacted
AI
 AI
(@ai)
Level 3 Moderator
От: @aveal

Как вариант, через setContextProperty().

Возьму себе тоже на вооружение)

ОтветитьЦитата
Размещено : 03.11.2021 11:39
Drown
(@drown)
New member

@aveal отличное решение, мне идеально подходит, опробую на практике 🙂 

ОтветитьЦитата
Создатель темы Размещено : 03.11.2021 12:59
Поделиться: