qt — Добавить / Вставить динамически элемент QML в представление QML с переполнением стека

Я пытаюсь добавить пользовательский элемент QML, который я создаю, в другое представление QML, уже загруженное из C ++.

Контекст следующий: я загружаю представление QML из C ++, и мне нужно добавить другой пользовательский компонент QML, который я встроил в это представление QML. Все на С ++.

Я искал 4 часа, и я не нашел способ сделать это.

Вот некоторый код, чтобы дать вам лучшую перспективу:

QmlDocument *qml = QmlDocument::create("asset:///PosicionConsolidad.qml").parent(this);
qml->setContextProperty("pos", this);

Page *page = qml->createRootObject<Page>();
myST = GlobalST::getInstance();
LoadInfo();

_mRoot->push(page);
_app->setScene(_mRoot);

void Project::LoadInfo() {
QmlDocument *qml = QmlDocument::create("asset:///customComponents/TableRow.qml").parent(this);
//Here's where I need to append this new QML custom element to the
//page previously loaded.
//I don't know if I can just inject it or I need to make a find child to
//maybe a parent container in the QML view and then add it there. But I
//also tried that and didn't work out.
}

Пожалуйста помоги. С уважением.

2

Решение

Вы можете создать страницу и корневой контейнер в C ++, а затем добавить все остальное из двух файлов QML. Правда, это заменяет findChild() вызов с кодом для создания страницы и контейнера. Наверное, не стоит.

2

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

Что ж, я наконец-то нашел способ пройти через него, который не совсем чистый и не самый красивый из всех. Я использовал функцию Find Child, чтобы получить контейнер, который принадлежит представлению, загруженному QML, а затем добавить свой пользовательский компонент QML столько раз, сколько мне нужно.

Некоторый код ниже:

Class::Constuctor(bb::cascades::Application *app,
NavigationPane* mRoot) :
QObject(app) {

_app = app;
_mRoot = mRoot;

QmlDocument *qml =
QmlDocument::create("asset:///PosicionConsolidad.qml").parent(this);
qml->setContextProperty("pos", this);

posicionConsolidadaPage = qml->createRootObject<Page>();
_mRootContainer = posicionConsolidadaPage->findChild<Container*>("posicion_consolidadad");

LoadInfo();

_mRoot->push(posicionConsolidadaPage);
_app->setScene(_mRoot);
}

void Class::LoadInfo() {

QmlDocument *qml = QmlDocument::create(
"asset:///customComponents/TableRow.qml").parent(this);
Container *activesHeader = qml->createRootObject<Container>();

AbsoluteLayout *pAbsoluteLayout = new AbsoluteLayout();
activesHeader->setLayout(pAbsoluteLayout);

AbsoluteLayoutProperties* pProperties = AbsoluteLayoutProperties::create();
pProperties->setPositionX(0);
pProperties->setPositionY(155);
activesHeader->setLayoutProperties(pProperties);

_mRootContainer->add(activesHeader);
}

Надеюсь, поможет. Если кто-нибудь знает, как добавить новый компонент непосредственно в объект Page или что-то подобное, пожалуйста, опубликуйте его 🙂

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector