2017-01-23 8 views
0

최근 QT의 cpp에서 qml의 체크 박스에 액세스하는 작은 문제가 있습니다. 문제는 아주 간단합니다 : 나는 main.qml 파일에 체크 박스가 있습니다. 응용 프로그램을 시작할 때 QSettings에 저장 한 구성에 따라 "checked"속성을 true 또는 false로 업데이트하려고합니다. 현재, 나는 응용 프로그램 시작시 cpp 파일의 QSettings에서 성공적으로 설정을로드했습니다. 그런 다음이 cpp 파일의 "checked"속성을 수정하는 방법은 무엇입니까?QT의 .cpp에서 QML의 하나의 체크 박스에 액세스하는 방법?

나는 이것을 시도했다 :을 사용하고 findChild 함수를 사용했지만 작동하지 않는다.

1), 나는 을 cpp 파일에 넣었지만 QtQuick file can't be found으로 오류가 발생했습니다.

2), "import <QtQuick/QQuickView>"으로 변경되었습니다. 1 해결)하지만,이 라인 QObject* object = view.rootObject(); 새로운 오류가 발생했습니다 :

cannot initialize a variable of type 'QObject *' with an rvalue of type 'QQuickItem *` 

3), I는 QQuickItem* object = view.rootObject();QObject* object = view.rootObject();이 줄을 변경하고 그 이후 QObject* acbox = object->findChild<QObject* >("acbox");을 사용했다. (acbox는 체크 박스의 개체 이름입니다) 2 해결)하지만 새로운 오류 가지고 :

Undefined symbols for architecture x86_64: 
    "QQuickView::setSource(QUrl const&)", referenced from: 
     ndn::TrayMenu::TrayMenu(QQmlContext*, ndn::Face&) in tray-menu.cpp.1.o 
    "QQuickView::QQuickView(QWindow*)", referenced from: 
     ndn::TrayMenu::TrayMenu(QQmlContext*, ndn::Face&) in tray-menu.cpp.1.o 
    "QQuickView::~QQuickView()", referenced from: 
     ndn::TrayMenu::TrayMenu(QQmlContext*, ndn::Face&) in tray-menu.cpp.1.o 
    "QQuickView::rootObject() const", referenced from: 
     ndn::TrayMenu::TrayMenu(QQmlContext*, ndn::Face&) in tray-menu.cpp.1.o 
ld: symbol(s) not found for architecture x86_64 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

누구나 어떤 제안을 가지고 있습니까? 미리 감사드립니다!

답변

0

다음 코드

int main(int argc, char *argv[]) 
    { 
      QGuiApplication app(argc, argv); 
      QQmlApplicationEngine engine; QQmlComponent component(&engine, QUrl("qrc:/main.qml")); 
      QObject *object = component.create(); 
      object->setProperty("checkstatus", false); 
      return app.exec(); 
    } 




    in qml try this 


    Window { 
    visible: true 
    width: 640 
    height: 480 
    title: qsTr("Hello World") 

    property bool checkstatus 


    CheckBox { 
     id:checkbox 
     text: qsTr("checkbox1") 
     checked: checkstatus 
    } 


    } 
을 확인 QML의 속성을 설정 한 다음 QML 파일에서 확인 된 상태로 그 바인딩 cpp에있는 setProperty는 사용할 수 있습니다
0

ref QT 페이지에서 예제를 시도해 보셨습니까? 아래 예제에서는 qml 신호를 C++ 클래스의 슬롯에 연결합니다. 그러나 역함수를 수행 할 수 있어야한다고 생각합니다. C++ 변수의 신호를 연결하여 확인란을 업데이트하려고합니다. 체크 박스를 업데이트하는 QML의 슬롯에 연결합니다.

int main(int argc, char *argv[]) { 
    QGuiApplication app(argc, argv); 

    QQuickView view(QUrl::fromLocalFile("MyItem.qml")); 
    QObject *item = view.rootObject(); 

    MyClass myClass; 
    QObject::connect(item, SIGNAL(qmlSignal(QString)), 
        &myClass, SLOT(cppSlot(QString))); 

    view.show(); 
    return app.exec(); 
}