- Jak odzyskać obiekt główny (poniżej kod zwraca 0,
rootContext()->findChild()
również zwraca 0) z dowolnego miejsca w kod C++ (metody klasy, gdzie klasa jest zarejestrowany typ QML i definicja komponentu klasy jest bezpośrednim potomkiem katalogu głównego, zobacz objectName) i dodać wygenerowany QQuickItem w czasie wykonywania? - Istnieje Myclass zarejestrowany jako typ QML. Jak dodać QML
Button
do sceny za pomocą najniższego kodu?
W main.qml (fragment)Get QML głównego obiektu z dowolnego miejsca w kodzie w Qt 5.3
import QtQuick 2.3
import QtQuick.Window 2.2
Window {
objectName: root
visible: true
width: 360
height: 100
// ...
}
myclass.cpp
void myclass::add_hip()
{
setProperty("hip", 87);
QQmlEngine *engine = QtQml::qmlEngine(this);
// QObject *root = engine->rootContext()->findChild<QObject*>("womanObj");
QQuickWindow *window = qobject_cast<QQuickWindow *>(root);
QObject *wobj = window->findChild<QObject *>("womanObj");
// 1. Define a QML component.
QQmlComponent *readHipComp = new QQmlComponent(engine);
readHipComp->setData("import QtQuick.Controls 1.2\n\
Button {\n\
anchors.top: addHipBtn.top\n\
anchors.left: addHipBtn.left\n\
anchors.margins: 3\n\
text: \"Hip value\"\n\
onClicked: {\n\
msgDlg.text = myclass.hip\n\
msgDlg.open()\n\
}\
}", QUrl());
// 2. Create the component instance.
QQuickItem *readHipBtn = qobject_cast<QQuickItem *>(readHipComp->create());
// 3. Add the instance to the scene.
// readHipBtn->setParentItem(qobject_cast<QQuickItem *>(engine->rootContext()->contextObject()));
// QObject *root = QtQml::qmlContext(this)->findChild<QQuickItem *>("root");
// readHipBtn->setParent(root);
}
UPDATE
extern QQuickWindow *window;
void myclass::add_hip()
{
//...
readHipBtn->setParentItem(window->contentItem());
//...
}
obrobione, ale 3) nie widzi inne obiekty main.qml.
Co masz na myśli przez „gdziekolwiek”? Gdziekolwiek w QML? Gdziekolwiek w plikach C++ innych niż main.cpp? –
Metoda klasy C++ – programmist