2014-03-19 4 views
0

QtQuick 응용 프로그램을 사용하여 일부 단추, 텍스트 영역으로 기본 UI를 디자인했습니다. 버튼 클릭과 같은 이벤트를 위해 C++에서 이벤트 처리기를 작성해야합니다. C++ 파일에서 qml 요소에 어떻게 액세스합니까?[해결] Qtquick C++ 클래스에서 응용 프로그램 이벤트 처리

+0

http://stackoverflow.com/questions/21437841/how-to-connect-a-qt-quick-button-click-to-ac-method/21438337#21438337 –

+0

가능한 복제본 ... "main.obj : -1 : 오류 : LNK2019 : 해결되지 않은 외부 기호"public : __cdecl SomeClass :: SomeClass (클래스 QObject *) "(0SomeClass @@ QEAA @ PEAVQObject @@@ Z) function main " –

+0

SomeClass :: SomeClass (QObject *)의 구현을 포함하는 .cpp 파일과 함께 .h 및 .cpp 파일을 SomeClass에 프로젝트에 추가 했습니까? –

답변

1

C++에서 QML 요소에 액세스하는 것은 좋지 않습니다. 간단한 예제를 통해 좀 더 선호 된 접근법을 보여 드리겠습니다.

  • 가있는 QObject를 상속하는 C++ 클래스를 작성 (예)

[controller.h]

#ifndef CONTROLLER_H 
#define CONTROLLER_H 

#include <QObject> 

class Controller : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit Controller(QObject *parent = 0); 
    Q_INVOKABLE void onItemClicked(); 
}; 

#endif // CONTROLLER_H 
(당신이 이벤트가 발생할 때 호출 할 것입니다 방법을 구현하는 것이 클래스)

[controller.cpp]

#include "controller.h" 
#include <QDebug> 

Controller::Controller(QObject *parent) : QObject(parent) 
{ 
} 

void Controller::onItemClicked() 
{ 
    qDebug() << "The item was clicked"; 
} 
  • 해당 클래스의 인스턴스를 만들고 QML UI를 실행하는 QQmlEngine의 컨텍스트 속성으로 설정합니다. Qt 빠른 응용 프로그램의 전형적인 "main.cpp"다음.

[MAIN.CPP]

#include <QtGui/QGuiApplication> 
#include <QQmlEngine> 
#include <QQmlContext> 
#include "qtquick2applicationviewer.h" 
#include "controller.h" 

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 
    QtQuick2ApplicationViewer viewer; 
    Controller c; 
    viewer.engine()->rootContext()->setContextProperty("Controller", &c); 
    viewer.setMainQmlFile(QStringLiteral("qml/quicktest/main.qml")); 
    viewer.showExpanded(); 
    return app.exec(); 
} 
  • 이제 자유롭게 QML 코드의 메소드 (들)을 호출 할 수있다.

는 [main.qml]

import QtQuick 2.0 

Rectangle { 
    width: 360 
    height: 360 
    Text { 
     text: qsTr("Hello World") 
     anchors.centerIn: parent 
    } 
    MouseArea { 
     anchors.fill: parent 
     onClicked: { 
      Controller.onItemClicked(); 
     } 
    } 
} 

난이 도움이되기를 바랍니다.

+0

작동합니다 .. 많이 고마워요! !! –

+0

당신은 환영합니다, @ Niikhil Patil! – mhcuervo

관련 문제