【发布时间】: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”放在双引号中。