回调qml函数调用segfault

时间:2014-06-06 11:23:30

标签: qt callback qml dbus

我在c ++代码中实现了qml函数的回调。让我解释一下我想要什么,什么时候一切都会奏效(我会相信;)。

我有两面: 一方面 - 带有gui的cml项目和带有dbus接口的c ++插件。

另一方面 - 只是处理dbus消息和回答的事情。


我想在qml代码中调用一些函数:

    Component.onCompleted: {
    A.request1( function(arg) {console.log('Callback func invoked - ', arg)} )

在c ++插件中我这样做:

    class A () {
    public:
      request1(QJSValue callback_func) {
        QList<QVariant> args;
        QDBusPendingCall pcall = interface->asyncCallWithArgumentList(QString("GetMachineId"), args);
        QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(pcall, this);
        QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
                         this, SLOT(response1(QDBusPendingCallWatcher*)));
        qjs_value = callback_func;
      }
    public slots:
      void response1(QDBusPendingCallWatcher* w) {
        cout << "Debug message1";
        qjs_value.call(QJSValueList() << 'Some text');
      }
    private: 
      QJSValue qjs_value;  
    }

Dbus发送消息,接收应答,观察者捕获回复,发起SIGNAL,连接到SLOT&#34; response1&#34;。 我看到调试消息&#34;调试消息1&#34;,所以我认为&#34; response1()&#34;函数被正确调用。但那,在下一行

         qjs_value.call(QJSValueList() << 'Some text');

我得到了一个段错误,我无法理解它的原因。

还有一件事:如果我在request1()函数中调用回调qjs_value.call - 它可以正常工作,我看到&#34;调用了回调函数 - 一些文本&#34;。但它并没有按照我描述的方式发挥作用。

你有什么想法吗?

1 个答案:

答案 0 :(得分:0)

也许在GUI线程中没有执行response1插槽?只是尝试将其连接为&#34;排队&#34;连接?