Чтобы быстро сделать значения C ++ видимыми в QML, вы можете установить их как свойство контекста :
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("screenWidth", sz_width);
engine.rootContext()->setContextProperty("screenHeight", sz_height);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
После этого переменные будут доступны в QML по кавычкам ("screenWidth""и" screenHeight ") (они также могут соответствовать имени переменной C ++, если вы предпочитаете).
QSize
тип также распознается QML , так что вы можете просто установить размер какодна переменная.
engine.rootContext()->setContextProperty("screenSize", screen->availableSize());
Также в этом случае искомая информация уже доступна в QML ... проверьте прикрепленный объект Screen , а такжеобъект / свойство Qt.application.screens для списка доступных экранов.
ДОБАВЛЕНО:
Поскольку в связанной документации это не упоминается напрямую, оно должно бытьотметил, что переменные свойства контекста, установленные таким образом, не имеют сигналов уведомлений об изменениях.Поэтому они не обновляются автоматически в QML, в отличие от других «привязываемых» свойств.Единственный способ заставить QML автоматически обновлять значение - это снова установить свойство контекста (или создать некоторый сигнал, к которому QML может подключиться и заставить его перечитать значение).
Я не могу найтигде именно это упоминается в документации Qt, но страница QQmlContext предоставляет (тонкий) ключ:
Свойства контекста определяются и обновляются путем вызова QQmlContext :: setContextProperty ().