qt — возможно ли создать компонент Qml из C ++?

Есть ли способ создать / добавить компонент QML из C ++?

Пример, если у меня есть этот QML:

Window {
id: window
objectName: "windowName"title: "windowName"width: 480
height: 800

Rectangle {
id: frmHeader
objectName: "frmHeader"width: parent.width
height: parent.height
}
}

Можно ли добавить TextInput на прямоугольнике?

0

Решение

В вашем случае вы должны выполнить следующие шаги:

  • найти элемент, используя objectName через findChild.

  • создать элемент с помощью QQmlComponent

  • добавить родитель как собственность.

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlComponent>
#include <QQmlProperty>

int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

QGuiApplication app(argc, argv);

QQmlApplicationEngine engine;
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;

QObject *frmHeader = engine.rootObjects().first()->findChild<QObject *>("frmHeader");
QQmlComponent component(&engine);
component.setData("import QtQuick 2.7 \n""TextInput{ \n""text: \"hello world :D\" \n""}", QUrl());
QObject *text_object = component.create();
if(text_object && frmHeader)
Q_ASSERT(QQmlProperty::write(text_object,
"parent",
QVariant::fromValue(frmHeader)));

return app.exec();
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]