Я пытаюсь добавить пользовательский элемент 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.
}
Пожалуйста помоги. С уважением.
Вы можете создать страницу и корневой контейнер в C ++, а затем добавить все остальное из двух файлов QML. Правда, это заменяет findChild()
вызов с кодом для создания страницы и контейнера. Наверное, не стоит.
Что ж, я наконец-то нашел способ пройти через него, который не совсем чистый и не самый красивый из всех. Я использовал функцию 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 или что-то подобное, пожалуйста, опубликуйте его 🙂