2014-04-24 2 views
1

커스텀 타입을 매개 변수로 전달하는 C++로부터 qml 메소드를 호출하려고합니다.커스텀 QObject 타입을 가진 qml 함수를 호출하는 Qt

이것은 내 사용자 정의 유형입니다 (* 내가 게시 한 모든 코드는 정확히 내가 사용하고있는 것이 아니며 관련 부분을 추출 했으므로 컴파일하려고하면 일부 변경이 가능할 수 있음을 유의하십시오)

Custom.h

class Custom : public QObject 
{ 
    Q_OBJECT 

    Q_PROPERTY(QString ssid READ getSSID WRITE setSSID) 

public: 

Q_INVOKABLE const QString& getSSID() { 
     return m_ssid; 
    } 
    Q_INVOKABLE void setSSID(const QString& ssid) { 
     m_ssid = ssid; 
    } 
} 

private: 
    QString m_ssid; 
}; 
Q_DECLARE_METATYPE(NetworkInfo) 

Custom.cpp

Custom::Custom(): QObject() { 
    setSSID("ABC"); 
} 


Custom::Custom(const Custom & other): QObject() { 
    setSSID(other.getSSID()); 
} 

를 I는 QML 방법

에게 전화 이것은 어디 만든 QQuickItem& m_item

내가 QML 및 QT 메타 유형으로 사용자 정의 선언이

qmlRegisterType<Custom>("com.mycustom", 1, 0, "Custom"); 

내가 QML 내부의 매개 변수에 액세스하려고

import com.mycustom 1.0 

function(custom) { 
    console.log(custom.ssid) 
} 

내가

를 얻을
void MyClass::myMethod(const Custom &custom) { 
     QMetaObject::invokeMethod(&m_item, 
           "qmlMethod", Q_ARG(QVariant, QVariant::fromValue(custom))); 
} 

qml: undefined 
내가 console.log(custom)을 할 경우

나는, 나는 내 타입이 올바르게 (내가 지금

Custom { 
.... 
} 

과 QML에 직접 인스턴스화 문제없이 사용하고 Qt를로 가져라고 말하고 싶지만, 그렇게

qml: QVariant(Custom) 

를 얻을 수 질문 :

왜 내가 ssid 속성에 액세스 할 수 없습니까?

답변

2

모든 것을 올바르게 등록한 것으로 보입니다. 개체가 QVariant 줄 바꿈에 걸려있는 것처럼 보이는 QML에서 때때로 버그가 발생할 수 있습니다. 다음을 시도해보고 작동하는지 확인하십시오.

import com.mycustom 1.0 

property QtObject temp 

function(custom) { 
    temp = custom; 
    console.log(temp.ssid); 
} 

는 때때로 QtObject가 성가신 "QVariant 래퍼"를 제거하고 문제를 해결할 수 인스턴스를 강제.