Qt-QML和QDBus互操作性

Qt-QML和QDBus互操作性,qt,properties,qml,dbus,networkmanager,Qt,Properties,Qml,Dbus,Networkmanager,Qt中有一个属性系统。一方面可以使用QDBusAbstractInterface的子类化,另一方面可以使用Qt-QML从D-Bus公开属性。对于D-Bus服务接口的属性和信号,它可以由元对象编译器自动完成。对于QML的QObject的信号、插槽和属性,MOC也可以自动完成 但问题出现了:QML需要属性和方法(信号或插槽)名称以小写字母开头,而Network Manager DBus API导出的对象的所有成员标识符都以大写字母开头(有时以小写字母开头,例如org.freedesktop.Netw

Qt中有一个属性系统。一方面可以使用
QDBusAbstractInterface
的子类化,另一方面可以使用Qt-QML从D-Bus公开属性。对于D-Bus服务接口的属性和信号,它可以由元对象编译器自动完成。对于QML的
QObject
的信号、插槽和属性,MOC也可以自动完成

但问题出现了:QML需要属性和方法(信号或插槽)名称以小写字母开头,而Network Manager DBus API导出的对象的所有成员标识符都以大写字母开头(有时以小写字母开头,例如
org.freedesktop.NetworkManager.state()
method)。但是我想使用这样一个
QDBusAbstractInterface
派生的对象直接到QML代码中

是否有一种方法可以自动将方法和属性的名称转换为
QtQml
的一种形式,以及
QDBus
的另一种形式

介绍如何分别为NetworkManager对象的所有属性发出信号


添加:鉴于这个问题,KDE NetworkManager Qt不太有用,因为QML中没有可与QObject-s一起导出的属性。

请查看qdbusxml2cpp创建的内容:如果有帮助的话。@AlexanderVX我拒绝了
qdbusxml2cpp
工具,因为CMake脚本无法为我生成正确的源(可能这只是Qt社区过时的支持,我使用3.9版本的cmake和
cmake_PREFIX_PATH=/usr/local/Qt-5.9.1/
)。另请参见问题中的一个示例:
qdbusxml2cpp
在使用NetworkManager时,无法为属性的
NOTIFY
部分创建信号。在这种情况下,只能手动操作。您可以只运行一次qdbusxml2cpp,并将该产品用作普通源代码。不过,我看到了其他原因。如果使用NetworkManager,您可以尝试KDE QtNetworkManager。我最初没有注意DBUS API是什么。@AlexanderVX我的代码基于
networkmanager qt
。但是来自的指令在我的系统上不起作用。我可以假设您的系统是Linux,它可以通过qt+=NetworkManagerQt包含在项目中,我还设置了QMAKEPATH=$(QTDIR)//Ur/Lb/x86y64-Linux Ung/Qt5或附加QMaPad路径到该库安装的地方。不要在系统上建立它,尽管SUDOT APT get安装LIKKF5NETWorkMeqReqQDV使用C++框架,然后您可以将QObjices为基础的东西暴露到QML中,甚至创建自己的QML C++项目。