2015-10-30 109 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類來做到這一點。