5
- C++ 코드의 어느 곳에서나 루트 객체 (아래 코드는 0을 반환,
rootContext()->findChild()
도 0을 반환 함)를 검색하는 방법 (클래스가 등록 된 QML 유형이고 클래스 구성 요소 정의는 루트의 직접적인 하위 항목입니다 (objectName 참조) 런타임에 생성 된 QQuickItem을 추가 하시겠습니까? - myclass가 QML 유형으로 등록되었습니다. 최하위 코드를 사용하여 QML
Button
을 장면에 추가하는 방법은 무엇입니까? main.qml에서
(단편)Qt 5.3의 코드에서 QML 루트 객체 가져 오기
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());
//...
}
는 작동했지만 3)은 볼 수 없습니다 다른 main.qml 객체.
당신이 "어디"무엇을 의미합니까? 어디서나 QML에? main.cpp 이외의 C++ 파일은 어디에서? –
C++ 클래스 메서드 – programmist