Eva*_*eil 4 c++ qt qnetworkaccessmanager
有没有办法检查是否使用Qt 拔掉电缆?
我知道Ip adress我想要联系,起初我正在考虑做ping request这个Ip Adress,但对于这个简单的任务来说似乎太复杂了.
所以我想也许,有一个简单的功能可以做到这一点QNetwork library.
我在互联网上搜索,但所有解决方案都没有测试一个特定的IP.
谢谢你的帮助.
有没有办法检查是否使用Qt拔掉电缆?
您可以使用QNetworkSession以下命令实现指定接口:
QNetworkConfigurationManager nwManager (this);
for (;;QThread::sleep (1) ) {
bool isConfigurationFound {false};
for (auto & configuration : nwManager.allConfigurations (/*QNetworkConfiguration::Active*/) ) {
// Name depends on the environment: "Wired connection 1", "McDonaldsFreeWiFi", "Home", "eth0", "eth1", etc...
if (isConfigurationFound = (configuration.name () == "eth0") ) {
QNetworkSession session (configuration, this);
session.open ();
session.waitForOpened (/*timeout*/);
qDebug () << "Session info:";
qDebug () << "- usage: " << (session.isOpen () ? "Opened" : "Closed");
qDebug () << "- state: " << (session.state () == QNetworkSession::Connected ? "Connected" : "Not connected");
break;
}
}
qDebug () << (isConfigurationFound ? "" : "Configuration not found.");
}
Run Code Online (Sandbox Code Playgroud)
如果您使用连接电缆启动此代码,您将获得:
"Session info:"
"- usage: Opened;"
"- state: Connected;"
Run Code Online (Sandbox Code Playgroud)
如果拔下电缆,你会得到:
"Session info:"
"- usage: Closed"
"- state: Not connected"
Run Code Online (Sandbox Code Playgroud)
这是完整的示例(也可以在GitLab上获得):
CMakeLists.txt
cmake_minimum_required (VERSION 2.8.8)
project (NaQt)
find_package (Qt5Network)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set (NaQt_SOURCES ${PROJECT_SOURCE_DIR}/main.cpp)
set (NaQt_HEADERS ${PROJECT_SOURCE_DIR}/NetworkAnalyzer.h)
qt5_wrap_cpp (NaQt_HEADERS_MOC ${NaQt_HEADERS})
add_executable (
naqt
${NaQt_SOURCES}
${NaQt_HEADERS_MOC}
)
target_link_libraries (
naqt
Qt5::Core
Qt5::Network
)
Run Code Online (Sandbox Code Playgroud)
main.cpp
#include <QtCore>
#include "NetworkAnalyzer.h"
int main (int argc, char * argv [])
{
QCoreApplication application (argc, argv);
NetworkAnalyzer networkAnalyzer (& application);
return application.exec ();
}
Run Code Online (Sandbox Code Playgroud)
NetworkAnalyzer.h
#ifndef QT_NETWORK_ANALYZER_H
#define QT_NETWORK_ANALYZER_H
#include <QThread>
#include <QNetworkConfigurationManager>
#include <QNetworkSession>
#include <QDebug>
class NetworkAnalyzer : public QObject
{
Q_OBJECT
public:
NetworkAnalyzer (QObject * parent = nullptr)
{
QNetworkConfigurationManager nwManager (this);
for (;;QThread::sleep (1) ) {
bool isConfigurationFound {false};
for (auto & configuration : nwManager.allConfigurations (/*QNetworkConfiguration::Active*/) ) {
// Name depends on the environment: "Wired connection 1", "McDonaldsFreeWiFi", "Home", "eth0", "eth1", etc...
if (isConfigurationFound = (configuration.name () == "eth0") ) {
QNetworkSession session (configuration, this);
session.open ();
session.waitForOpened (/*timeout*/);
qDebug () << "Session info:";
qDebug () << "- usage: " << (session.isOpen () ? "Opened" : "Closed");
qDebug () << "- state: " << (session.state () == QNetworkSession::Connected ? "Connected" : "Not connected");
break;
}
}
qDebug () << (isConfigurationFound ? "" : "Configuration not found.");
}
}
};
#endif//QT_NETWORK_ANALYZER_H
Run Code Online (Sandbox Code Playgroud)