2016-04-26 26 views
1

我正在編寫基於QCoreApplication的控制檯應用程序,並且我想要獲取信號,當用戶將某些內容輸入到標準輸入時(整行一行或按字符輸入,對我的應用程序來說並不重要)。如何獲得控制檯輸入(stdin)的類QIODevice信號?

QFile根據文檔不發射信號,所以任何想法如何獲得信號,如果用戶把東西放在stdin

現在我正在使用qt 4.8.7/linux/amd64,但我希望在未來將此代碼移植到macosx和windows。

更新

我找到的解決方案,應該基於OS * nix的工作,像linuxmac os x

https://gist.github.com/gjorquera/2576569

但是,我們的窗戶,將它也與QSocketNotfier

+0

您的程序在等待用戶輸入時還在做什麼?什麼? –

+0

@JohnZwinck它通過套接字與不同的服務進行通信,所以我希望基於信號/插槽的「異步」解決方案,因爲它更簡單,支持多線程代碼 – user1244932

+1

根據此:http://www.qtcentre.org/archive /index.php/t-20357.html你不能在Windows上使用'QSocketNotifier'和'fileno(stdin)'。但看看這個答案:http://stackoverflow.com/a/23164552/4323 –

回答

1

對於Unix(Linux,OS X),this answer有一個解決方案。

對於Windows,您不能使用QSocketNotifier;相反,使用QWinEventNotifier上的控制檯手柄從GetStdHandle獲得(見this answer)。代碼將與上述答案中的Unix變體幾乎相同。

相關問題