QT 및 QML로 응용 프로그램을 개발하여 일부 XML 데이터에 액세스하고 결과를 표시합니다.CML 내에서 항목 속성에 액세스하는 데 도움이 필요한 QML 초보자
XML은 C++에서 다운로드/구문 분석되며 정상적으로 작동합니다. 사용자 정의 레이아웃을 표시하도록 설계된 QML 응용 프로그램이 있고 그 또한 잘 작동합니다.
응용 프로그램을 좀 더 세련되게 보이게하려면 C++ 측에서 초기 다운로드/구문 분석을 완료하는 동안 표시되는 초기 "스플래시 화면"이 있고 현재 QML 뷰 내부의 속성을 만들어 현재 응용 프로그램 "상태"를 나타냅니다. 그래서 데이터가 준비되면 올바른 화면으로 바꿀 수 있습니다.
Main.qml
Item
{
id: mainScreen
width: 800; height: 600;
property int activeState: 0 // This controls what screen is displayed
Item
{
// screen layout .. removed ..
}
}
는 C++ 코드는 QT 만든 응용 프로그램 마법사에서 생성되고 기본 QmlApplicationViewer
클래스를 기반으로한다.
내가 읽은 (다시는 읽기) 온라인 QT의 문서를하고 기발한 내가 mainScreen
가의 개별 속성에 액세스해야하는 모두가에 QObject
포인터를 반환하는 응용 프로그램 시청자 rootContext()
의 findChild<QObject *>
메소드를 호출 mainScreen
인스턴스를 호출 한 다음 setProperty
메서드를 호출하십시오. 주요 QML 파일 설정을 즉
QmlApplicationViewer viewer;
viewer.setMainQmlFile(QLatin1String("main.qml"));
viewer.showExpanded();
viewer.createMyApplication();
하지만 ...
문제가 된 후 ROOT_CONTEXT
가
QDeclarativeContext *ROOT_CONTEXT;
QDeclarativeEngine *ROOT_ENGINE;
QGraphicsObject *ROOT_OBJECT;
void QmlApplicationViewer::createMyApplication(void)
{
ROOT_CONTEXT = this->rootContext();
ROOT_OBJECT = this->rootObject();
ROOT_ENGINE = this->engine();
pMyApplication = new MyApplication(this);
}
및 void QmlApplicationViewer::createMyApplication(void)
로 다른 곳에서 정의됩니다
QObject *mainView = ROOT_CONTEXT->findChild<QObject *>("mainScreen");
qDebug("mainView = %08X",(uint)mainView);
if(mainView)
{
mainView->setProperty("activeState",1);
}
else
qDebug("Unable to find the mainScreen QML object");
가 호출된다 나는 그 값이에서 반환된다는 것입니다.은 항상 NULL입니다. 다음 코드
QList<QObject*> list = ROOT_OBJECT->findChildren<QObject*>();
qDebug("list = %d",list.count());
int i;
for(i=0;i<list.count();i++)
{
QObject *obj = list[i];
qDebug() << "Object" << i << obj->objectName();
}
를 사용하여 내 QML 파일에서 객체의 계층 구조를 통해 열거 시도하고 나는 ~ 120 항목의 목록을 얻을 수 있지만, 그들은 모두 자신의 이름에 대한 빈 문자열 ("")이있다. 이 블로그 항목에 같이 QT의 문서를 다시 찾고
는모든 예제 (즉 QDeclarativeEngine
, QDeclarativeComponent
및 QDeclarativeItem
의 인스턴스를 생성)과 QApplicationViewer
클래스를 사용하는 대신 그들을 함께 연결 손으로 개별 부품을 만드는 제안하는 것 http://xizhizhu.blogspot.co.uk/2010/10/hybrid-application-using-qml-and-qt-c.html, 그러나 나는 오히려 내가 이미 작성한 코드를 고수하고 싶다.
아무도 도와 줄 수 있고 내가 잘못 가고있는 곳을 제안하거나 C++에서 QML 파일의 Item 속성을 변경할 수있는 "간단한"예제를 찾을 수있는 방향으로 나를 가리킬 수 있습니까?
많은 분들께 미리 감사드립니다.
존 ...
감사합니다, 나는 그 속성을 필요 했어 방법을 볼 수 있습니다 (I은 문서의 해당 섹션을 놓쳤다). 그러나 나는 여전히 NULL을 얻고 있습니다. 다시 돌아가서 조심스럽게 코드를 작성해야 제가 다른 것을 놓치지 않았는지 확인할 수 있습니다. FWIW - 루트 항목에 액세스하려고 시도했습니다. 루트 항목의 하위 요소에 액세스하려고 시도하면 작동하는지 궁금합니다. 도와 줘서 고마워. 8-) – Techdojo
@Techdojo 답변이 도움이된다면, 받아 들여야합니다. [FAQ] (http://stackoverflow.com/faq#howtoask)를보십시오. –
수락 - 아래의주의 사항을 참조하십시오! – Techdojo