libnm-qt 填坑
来源:互联网 发布:javascript input赋值 编辑:程序博客网 时间:2024/06/05 00:54
最近做 嵌入式下 qt dbus 通信 时 使用 networkmanager 获取 网络状态核设置ip
networkmanager 有简单的示例但是 操作 纯dbus 通信 过于 复杂
然后
发现 kde 有个 libnm-qt 用qt 写的 好办 就移植编译了一下
这个才是坑的开始 示例 只有 显示 ip 和连接wifi 的一个测试
那我像自己静态ip 怎么办呢 扯淡了 没有任何文档 只能自己分析
https://conf.qtcon.org/system/attachments/123/original/akademy-2016.pdf?1473087776
看到这个 也是 设置 wifi 的
然后 自己改造吧
NetworkManager::ConnectionSettings *settings = new NetworkManager::ConnectionSettings(NetworkManager::ConnectionSettings::Wired); settings->setId("__Test connection__");settings->setUuid(QUuid::createUuid().toString().mid(1, QUuid::createUuid().toString().length() - 2)); NetworkManager::Ipv4Setting::Ptr ipv4Setting = settings->setting(NetworkManager::Setting::Ipv4).dynamicCast<NetworkManager::Ipv4Setting>(); // ipv4Setting->setType(NetworkManager::Setting::Ipv4); ipv4Setting->setMethod(NetworkManager::Ipv4Setting::Manual); NetworkManager::addConnection(settings->toMap());
提交 报错 到底什么问题呢 然后 dbug 一下 setting tomap 的内容 发现缺少 ipv4 难道这样不行
代码 追啊追 追啊追。。。。 耗时了大半天
connectionsettings.cpp
foreach (const Setting::Ptr &setting, settings()) { QVariantMap map = setting->toMap(); if (!setting->isNull()) { result.insert(setting->name(), map); } }
分析到 莫非 isnull 判断有误 明明 有数据
最近去查看
bool NetworkManager::Setting::isNull() const{ Q_D(const Setting); return !d->initialized;}
what ? 是库封装了个函数 竟然是返回 是判断 这个的标记
initialized
好吧 看哪个地方设置
看到头文件 有个
void setInitialized(bool initialized);
好吧 服了 改进一下代码
NetworkManager::Ipv4Setting::Ptr ipv4Setting = // new NetworkManager::Ipv4Setting;// dynamic_cast<NetworkManager::Ipv4Setting>(settings->setting(NetworkManager::Setting::Ipv4)); settings->setting(NetworkManager::Setting::Ipv4).dynamicCast<NetworkManager::Ipv4Setting>(); // ipv4Setting->setType(NetworkManager::Setting::Ipv4); ipv4Setting->setMethod(NetworkManager::Ipv4Setting::Manual); ipv4Setting->setInitialized(true);
打印一下 setting map 好了 加进去了 抽根烟 准备 提交
抽
烟
中
...........
失败了
什么问题哦
QDBusMarshaller: type `NMVariantMapMap' (276) is not registered with D-BUS. Use qDBusRegisterMetaType to register it
QDBusConnection: error: could not send message to service "org.freedesktop.NetworkManager" path "/org/freedesktop/NetworkManager/Settings" interface "org.freedesktop.NetworkManager.Settings" member "AddConnection": Marshalling failed: Unregistered type NMVariantMapMap passed in arguments
NetworkManagerQt "newnetworkmanger" ( 10469 ) void NetworkManager::SettingsPrivate::init() : New Connections list
继续看下 map
QMap(("connection", QMap(("id", QVariant(QString, "__Test connection__") ) ( "type" , QVariant(QString, "802-3-ethernet") ) ( "uuid" , QVariant(QString, "e016e13f-699b-495e-9cc0-289b713f809f") ) ) ) ( "ipv4" , QMap(("method", QVariant(QString, "manual") ) ) ) )
我曹 没问题啊
到底需要什么样的格式啊 郁闷
莫非
NetworkManager::addConnection(map);
这里 。。。
看到了这个
QList<QVariant> argumentList; argumentList << QVariant::fromValue(connection); return asyncCallWithArgumentList(QLatin1String("AddConnection"), argumentList);
那我换种方式吧
QDBusInterface interface( NM_DBUS_SERVICE, NM_DBUS_PATH_SETTINGS, NM_DBUS_IFACE_SETTINGS, QDBusConnection::systemBus()); qDBusRegisterMetaType<NMVariantMapMap>(); QDBusReply<QDBusObjectPath> result = interface.call("AddConnection", QVariant::fromValue(map)); if (!result.isValid()) { qDebug() << QString("Error adding connection: %1 %2").arg(result.error().name()).arg(result.error().message()); } else { qDebug() << QString("Added: %1").arg(result.value().path()); }
ok 了 竟然ok 了
好吧 暂且先这样吧 自带的提交 不知道问题出在了哪 对那种提交方式不了解
- libnm-qt 填坑
- qt designer 界面设计填坑之路 一
- 填坑~
- 填坑
- 填坑
- 坑。。待填
- 填(wa)坑计划
- Intent填坑
- java填坑
- Davik虚拟机填坑
- 填坑-浏览器-0
- ODB-Oracle填坑
- 填坑计划
- WORDPRESS 入门填坑
- Swagger填坑
- nw.js 填坑
- AndroidStudio填坑
- peakage.json填坑
- 性能测试 PTS 铂金版来袭!阿里云发布T级数据压测的终极秘笈
- C#之字符判断和大小写的转换
- java Serializable 接口
- 5179 beautiful number
- Log4j日志配置详解
- libnm-qt 填坑
- 基于连通域的汉字切割
- 最长公共子序列问题
- python 进阶-高阶函数
- hdu3047-带权并查集
- 欢迎使用CSDN-markdown编辑器
- 【坑儿】多次调用自定义接口上传数据,记录上传次数bug
- POJ 3468 A Simple Problem with Integers——区间更新的线段树
- image加密