项目中需要用到libdbus库,于是需要将DBusMessage转化为QDbusMessage。 查阅Qt源代码,发现
QDBusMessage QDBusMessagePrivate::fromDBusMessage(DBusMessage *dmsg, QDBusConnection::ConnectionCapabilities capabilities)
这个函数能实现这样的功能。
比照Qt的代码,自己是这样写的:
DBusMessage *msg;
QDBusConnection::ConnectionCapabilities capabilities = QDBusConnection::UnixFileDescriptorPassing;
QDBusMessage message = QDBusMessagePrivate::fromDBusMessage(msg, QDBusConnection::UnixFileDescriptorPassing);
但是编译提示
`QDBusMessagePrivate::fromDBusMessage(DBusMessage*, QFlags<QDBusConnection::ConnectionCapability>)' 未定义。
传入的参数capabilities明明是QDBusConnection::ConnectionCapabilities(用Q_DECLARE_FLAGS定义的)类型的,为什么就变成了
QFlags<QDBusConnection::ConnectionCapability>类型,而且无论是对capabilities用static_cast,还是c语言式强制类型转化都无法转化为
QDBusConnection::ConnectionCapabilities类型传过去。
然后我又试了
QDBusMessage message = QDBusMessagePrivate::fromDBusMessage(msg, 1);
这次没有显示错误
`QDBusMessagePrivate::fromDBusMessage(DBusMessage*, QFlags<QDBusConnection::ConnectionCapability>)' 未定义了。
但是却出现了错误
.. /main.cpp:17:71: error: invalid conversion from ‘int’ to ‘QDBusConnection::ConnectionCapability’ [-fpermissive]
QDBusMessage message = QDBusMessagePrivate::fromDBusMessage(msg, 1);
说明QDBusMessagePrivate::fromDBusMessage(DBusMessage *dmsg, QDBusConnection::ConnectionCapabilities capabilities) 这个函数还是能调用的,但是为什么会出现传递的参数类型被改变了呢?
还望大家多多指教。
下面是一个MWE:
#include <private/dbusmessage_p.h>
#include <QApplication>
#include <QtDBus/QDusConnection>
int main(int argc, char *argv[])
{
DBusMessage *msg;
QDBusConnection::ConnectionCapabilities capabilities = QDBusConnection::UnixFileDescriptorPassing;
QDBusMessage message = QDBusMessagePrivate::fromDBusMessage(msg, QDBusConnection::UnixFileDescriptorPassing);
QDBusMessage message = QDBusMessagePrivate::fromDBusMessage(msg, 1);
return 0;
}
需要链接dbus dbus-private。
補充:
QDBusConnection::ConnectionCapabilities的定義:
enum ConnectionCapability {
UnixFileDescriptorPassing = 0x0001
};
Q_DECLARE_FLAGS(ConnectionCapabilities, ConnectionCapability)