【问题标题】:Callback qml function invoke segfault回调 qml 函数调用 segfault
【发布时间】:2014-06-06 11:23:29
【问题描述】:

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

我有两个方面: 一方面 - 带有 gui 的 qml 项目和带有 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 发送消息,接收应答,Watcher 捕捉应答,发起 SIGNAL,连接到 SLOT“response1”。 我看到调试消息“Debug message1”,所以我认为“response1()”函数被正确调用。但是,在下一行

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

我得到一个段错误,我不明白它的原因。

还有一件事:如果我在 request1() 函数中调用回调 qjs_value.call - 它工作正常并且我看到“调用回调函数 - 一些文本”。但它并没有按照我描述的方式工作。

你有什么想法吗?

【问题讨论】:

  • 可能是因为在 C++ 中单引号仅用于单个字符。您应该将“Some text”放在双引号中。

标签: qt callback qml dbus


【解决方案1】:

也许response1 槽没有在GUI 线程中执行?只是尝试将其连接为“排队”连接?

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 2015-09-27
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多