2015-10-30 47 views
0

我试图在QTextEdit框中显示Raspberry Pi的IP地址;在树莓派上使用qt显示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地址?

回答

1

这不是一个 “问题”,这是因为:

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

返回 “0”(最有可能是因为system("hostname -I")命令的结果是0),所以QTextEdit显示0

注意,当你运行一个进程:

  • 它返回退出代码(main函数的返回值)为整数。在大多数情况下,0意味着成功,其他意味着失败。
  • 它显示一些信息到标准输出(什么发送到std::cout)。

因此,当您拨打system("hostname -I"))时,如果成功,则返回0,然后您需要解析其标准输出以查找此处打印的IP地址。

您可以通过使用QProcess,或将其重定向到一个文件,然后读取文件赶上通话的标准输出(system("hostname -I > ip.txt")可以工作,待测试)

或者,让您的IP地址作为文本的最好是使用QNetworkInterface,检查this post,然后你可以在你的QTextEdit中显示它。

+0

我要注意的是,我在Raspberry Pi和终端上这样做,这个命令确实显示ipaddress,但我可能会误解一些东西 – MShields

+0

您正在混合程序结果和输出。看到我编辑的帖子。 – jpo38

+0

我试图使用QNetwork接口,如该帖子所示,但获得相当不变的构建错误,声明QHostAddress是未定义的,即未定义的引用'QHostAddress ::〜QHostAddress()' – MShields

1

使用system()是丑陋的,除非你正在编写一次性项目,你应该考虑使用QNetworkInterface类来做到这一点。