在 Raspberry Pi 上使用 qt 显示 ipaddress

Display ipaddress using qt on Raspberry Pi

我正在尝试在 QTextEdit 框中显示 Raspberry Pi 的 IP 地址;

IPAddress = new QTextEdit("Current IP Address: \n", this);
QString tem = QString::number(system("hostname -I"));
IPAddress->append(tem);
IPAddress->setStyleSheet("QTextEdit{border: none;outline:none;border-image: none;}");
IPAddress->show();

问题是 IP 地址显示为 0。

如何让它显示实际的 IP 地址?

那不是 "problem",因为:

QString::number(system("hostname -I")); 

returns "0"(很可能是因为 system("hostname -I") 命令结果为 0),所以 QTextEdit 显示 0.

请注意,当您 运行 一个进程时:

  • 它returns 一个整数形式的退出代码(main 函数返回值)。在大多数情况下,0 表示成功,其他任何情况都表示失败。
  • 它向标准输出显示一些信息(发送到 std::cout 的内容)。

因此,当您调用 system("hostname -I")) 它 returns 0 如果成功,然后您需要解析其标准输出以找到打印在此处的 IP 地址。

您可以通过使用 QProcess 或将其重定向到文件然后读取文件来捕获调用的标准输出(system("hostname -I > ip.txt")可能有效,待测试)

或者,要以文本形式获取您的 IP 地址,最好使用 QNetworkInterface, check this post,然后您可以在 QTextEdit 中显示它。

使用 system() 很丑陋,除非您编写的是一次性项目,否则您应该考虑使用 QNetworkInterface class 来执行此操作。

试试这个代码:

 for (QHostAddress address: QNetworkInterface::allAddresses())
    if (address.protocol() == QAbstractSocket::IPv4Protocol)
       IPAddress->append(address.toString());