У меня есть GridView, где я вызываю метод C ++, подобный этому
function delegateDataHandler()
{
print(Qt.formatTime(new Date(),"h:m:s:z"), "delegateDataHandler finished")
}
GridView.onAdd : {
cppProxy.startObserver( itemDelegate.observerPointName, itemDelegate.delegateDataHandler );
}
Вот мой код cpp:
void FacadeProxy::startObserver( QVariant observerName, QJSValue dataHandler )
{
QString observerNameAsString = observerName.toString();
try {
m_facade->startObserver( observerNameAsString.toStdString(),
[dataHandler, this]( std::vector<float> in ) mutable -> void {
if ( dataHandler.isCallable() ) {
QJSValue val = dataHandler.engine()->newObject();
val.setProperty("x", 10);
QQmlEngine::setObjectOwnership( val.toQObject(), QQmlEngine::JavaScriptOwnership);
QJSValueList args;
args.push_back( val );
dataHandler.call( args );
}
}
);
Info("observer \"%s\" started", observerNameAsString.toStdString().c_str() );
} catch(...) {
Error("observer \"%s\" start failed", observerNameAsString.toStdString().c_str() );
}
}
Спорадически у меня ошибка seg с dataHandler.call( args );
Есть ли очевидная проблема с этой реализацией?