zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Qt之QHostInfo

Qt
2023-09-11 14:19:16 时间

QHostInfo 利用操作系统提供的查询机制来查询与特定主机名相关联的主机的 IP 地址,或者与一个IP地址相关联的主机名。这个类提供了两个静态的便利函数:一个以异步方式工作,一旦找到主机就发射一个信号;另一个以阻塞方式工作,并且最终返回一个 QHostInfo 对象。

要使用异步方式查询主机的 IP 地址,调用 lookupHost() 即可,该函数包含 3 个参数,依次是:主机名/ IP 地址、接收的对象、接收的槽函数,并返回一个查询ID。以查询ID为参数,通过调用 abortHostLookup() 函数的来中止查询。

当获得查询结果后就会调用槽函数,查询结果被存储到 QHostInfo 对象中。可通过调用 addresses() 函数来获得主机的 IP 地址列表,同时可通过调用 hostName() 函数来获得查询的主机名。


QString strLocalHostName = QHostInfo::localHostName();

qDebug() "Local Host Name:" strLocalHostName;

输出结果:


使用 lookupHost() ,实际的查询在一个单独的线程中完成,利用操作系统的方法来执行名称查找。


int nID = QHostInfo::lookupHost("qt-project.org", this, SLOT(lookedUp(QHostInfo)));

void MainWindow::lookedUp(const QHostInfo host)

 if (host.error() != QHostInfo::NoError) {

 qDebug() "Lookup failed:" host.errorString();

 return;

 foreach (const QHostAddress address, host.addresses()) {

 // 输出IPV4、IPv6地址

 if (address.protocol() == QAbstractSocket::IPv4Protocol)

 qDebug() "Found IPv4 address:" address.toString();

 else if (address.protocol() == QAbstractSocket::IPv6Protocol)

 qDebug() "Found IPv6 address:" address.toString();

 else

 qDebug() "Found other address:" address.toString();

}

输出结果:


Found IPv4 address: “5.254.113.102”
Found IPv4 address: “178.32.152.214”


int nID = QHostInfo::lookupHost("5.254.113.102", this, SLOT(lookedUp(QHostInfo)));

void MainWindow::lookedUp(const QHostInfo host)

 if (host.error() != QHostInfo::NoError) {

 qDebug() "Lookup failed:" host.errorString();

 return;

 qDebug() "Found hostName:" host.hostName();

}

输出结果:


QHostInfo host = QHostInfo::fromName("5.254.113.102");

if (host.error() != QHostInfo::NoError) {

 qDebug() "Lookup failed:" host.errorString();

 return;

qDebug() "Found hostName:" host.hostName();

输出结果:


这种情况下,名称查询的执行与调用者处于相同的线程中。这对于非 GUI 应用程序或在一个单独的、非 GUI 线程中做名称查找是比较有用的(在 GUI 线程中调用这个函数可能会导致用户界面冻结)。


lookupHost() 查询主机信息时,会返回一个查询 ID,以此 ID 为参数,通过调用 abortHostLookup() 来中止查询:


如果查询失败,error() 返回发生错误的类型,errorString() 返回一个能够读懂的查询错误描述。

枚举 QHostInfo::HostInfoError:


QTimeLine 类提供了用于控制动画的时间轴,通常用于通过定期调用一个槽函数来动画一个 GUI 控件。 相信了解动画的人对帧应该不陌生,可以把一个动画想象成由很多张静态画面组成,而每一个画面就是一帧图像。每隔一定时间间隔就显示一帧图像,当该间隔较短时,人眼就感觉不出来了,觉得看到的是连续的影像。
QFuture 允许线程与一个或多个结果同步,这些结果将在稍后的时间点准备就绪,该结果可以是具有默认构造函数和拷贝构造函数的任何类型。如果一个结果在调用 result()、resultAt() 或 results() 函数时不可用,QFutur
QDateEdit和QTimeEdit均继承自QDateTimeEdit,许多特性和功能都有QDateTimeEdit提供。这些都是相关属性:
QLocalServer可以接受来自本地socket的连接。通过调用listen(),让server监听来自特定key的连接。 调用nextPendingConnection()来接受一个挂起(等待)的连接作为一个已连接的QLocalSocket。函数返一个QLocalSocket指针,可以被
现代操作系统通常在桌面上提供一个特殊的区域,称为系统托盘或通知区域,长时间运行的应用程序可以显示图标和短消息。