2012-06-27 36 views
0

我使用的是Ubuntu和Qt Creator 4如何調用期望從QtGui輸入stdin的應用程序?

我有一個可執行文件(比如說abc.out)的.cpp程序,我希望在按下按鈕時運行。它包含許多cin和cout,所以我想讓它在「終端」上運行(在Ubuntu上),以便我可以輸入和輸出值。我怎樣才能做到這一點?

我試過system()和 也是, QProcess p1; p1.start(./ abc.out);

使用QProcess,我的可執行文件運行,但停在第一個cout。它在Qt Creator的應用程序輸出屏幕上運行,而不是在終端上運行。

例如: 我看到應用程序輸出:

輸入名稱:

當我鍵入數值,然後進入這裏,它不接受的價值,但移動到下一個並允許我輸入更多。 我想在終端上運行這個abc.out文件。任何想法都會非常有幫助。

+0

我不知道我是否理解你的問題..你是否正在嘗試編寫一個應用程序來啓動使用QProcess的其他應用程序?在這種情況下,您必須明確處理如何將用戶輸入發送到您的子應用程序。 – pwuertz

回答

1

你的意思是Qt Creator 2.4嗎?在任何情況下,在「項目」選項卡上,都應找到「運行設置」部分,然後您可以在其中找到「在終端中運行」複選框。您也可以使用自定義可執行文件選項並鍵入:gnome-terminal --command ./abc.out由於我使用的是Qt Creator 2.5,因此具體細節可能會有所不同。

這應該從Qt Creator啓動時起作用,但是當您在IDE之外使用應用程序時,您需要從終端啓動它,而不是通過雙擊可執行文件。爲了解決這個問題,我能想到的方法有兩種:

  1. 啓動從QtGui(像QProcess::execute("gnome-terminal --command ./abc.out");)一個終端窗口,但問題是不同的系統有不同的終端名稱。
  2. 提供一個Qt輸入/文本框作爲GUI的一部分,然後將用戶輸入轉發給可執行文件(如myqprocess.write(input_asked_from_user_by_QtGui);)。在這裏,您可能需要知道需要事先詢問用戶的信息。如果要顯示已啓動進程的cout輸出,可以使用QProcess的read方法和朋友。
+0

我不認爲我很清楚。 void MainWindow :: on_pushButton_clicked() {QProcess p1; p1.execute(「./ obj.out」); } 這是我的代碼。 obj.out有一些cin和cout。我該如何處理?第一個cout出現在創作者的應用程序輸出窗口中。我想如果我可以從obj.out中獲取std :: cin和std :: cout以在gcc這樣的終端上出現,則此問題將消失 – user1484717

+0

@ user1484717 - 這就是我在我的答案中試圖解決的問題。我修改了一些實現提示。 – Tapio

+0

謝謝。我啓動了一個終端窗口,並能夠用它來管理 – user1484717

0

從你的問題我假設你正在編寫一個應用程序,啓動其他應用程序使用QProcess。這很好,但如果你的子進程正在等待來自標準輸入的數據,它將永遠等待,因爲你沒有提供任何數據。您的父應用程序的標準輸入不能被自動引導到子流程。想象一下,您正在從主應用程序啓動兩個進程。輸入到哪個子進程?

如果您想與子進程進行通信,您必須使用QProcess的QIODevice方法並向/從該應用程序發送/讀取數據。

0

唯一明智的解決方案是在終端中啓動目標應用程序。無論您自己的代碼是提供終端窗口,還是重複使用現有的終端應用程序,都取決於您。

相關問題