Qt5.12: вызов функции обратного вызова qml приводит к ошибкам спорадической сегментации - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть 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 ); Есть ли очевидная проблема с этой реализацией?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...