我注意到,如果我创建
QNetworkAccessManager
的实例,甚至不使用该实例(不发出任何请求或其他操作),然后关闭我的 VPN,我的 Qt 应用程序会打印:
"Object does not exist at path “/org/freedesktop/NetworkManager/ActiveConnection/28”"
"Object does not exist at path “/org/freedesktop/NetworkManager/ActiveConnection/28”"
看来这不是我的错。但有什么办法可以消除这些警告吗?还是我做错了什么?
我能想到的唯一方法是在每个实际请求上创建一个
QNetworkAccessManager
的实例。但这听起来确实效率很低。另外,如果我在实际请求期间关闭 VPN 会怎样——那么我仍然会遇到同样的问题。
有一个 QT bug https://bugreports.qt.io/browse/QTBUG-114666 它有不同的症状,但描述准确地描述了这里发生的情况。
幸运的是,有一个修复程序,可以在该错误的评论中找到https://codereview.qt-project.org/c/qt/qtbase/+/373426,因此应用此补丁可以解决该问题。
这样做时,警告在我的项目中消失了,似乎它应该从所做的更改中起作用。另外需要注意的是,在我的项目中,我还观察到大量 CPU 时间花费在
QNetworkManager
上,这个补丁也解决了这个问题。
注意:这可能取决于所使用的 NetworkManager 版本,因为新接口仅在 1.2.0 中引入(您可以在此处查看
PropertiesChanged
信号描述 https://developer-old.gnome.org/NetworkManager/ stable/gdbus-org.freedesktop.NetworkManager.Connection.Active.html),而我的版本是1.42.6(您可以通过nmcli --version
查看您使用的版本)