C++ (로직) 및 QML (UI)로 작성된 앱이 있습니다. 는 C++에서 일부 I는 QML 개체 (이벤트 시스템의 종류)C++ invokeMethod가 QML 메소드에 액세스 할 수 없습니다.
이 C++ 객체의 단순화 된 코드의 모음이 있습니다
QML 객체의class Config : public QObject
{
Q_OBJECT
Q_ENUMS(DataEvent)
public:
enum DataEvent {
DataEventUndefined = 0,
DataEventDateChanged
};
~Config();
Q_INVOKABLE void registerToEvent (DataEvent event, QQuickItem *item)
{
p_dataListeners.insert(event,item);
}
private:
QMap<DataEvent,QQuickItem *> p_dataListeners;
}
내가 전화를 C++ 기능을하고 그것은처럼 작동 매력. 이 QML 코드의 일부입니다
Item {
id: myQMLObject
function init() {
Config.registerToEvent(Config.DataEventDateChanged,myQMLObject);
}
function receiveEvent(eventType) {
...
}
}
OK, 지금은 저장 QML의 개체 중 하나의 QML 함수를 호출 할 :
event = Config::DataEventDateChanged;
QMapIterator<DataEvent,QQuickItem *> i(p_dataListeners);
while (i.hasNext()) {
i.next();
if(event == i.key()) {
QQuickItem *item = i.value();
QMetaObject::invokeMethod(item, "receiveEvent",
QGenericReturnArgument(),
Q_ARG(Config::DataEvent, event));
}
}
을하지만 난이 오류를 얻을 : QMetaObject::invokeMethod: No such method MyQMLObject_QMLTYPE_44::receiveEvent(Config::DataEvent)
무엇 나는 틀린가?
OK, thanks @Mitch! 나는 내 직장 컴퓨터에 도착하면 그것을 시도 할 것이다. 그렇다면 등록 된 타입을 사용하는 것은 불가능하지만 QVariant에만 함수 매개 변수로 형변환했다는 말입니까? – folibis
가능할 수 있습니다. 내가 말했듯이, 나는 잘 모르겠다. – Mitch
QVariant가 필요한 이유에 대한 설명으로 내 대답을 업데이트했습니다. – Mitch