簡體   English   中英

將Qt GUI與TCL應用程序連接

[英]Connecting Qt GUI with TCL application

我有一個Qt GUI和另一個使用TCL解釋器與用戶通信的應用程序。

我希望Qt和應用程序共享在應用程序中創建的信息並在GUI中顯示。 這就是為什么我需要它們成為同一進程的線程(在它們之間共享一個指針)。

另外,我希望Qt生成字符串,該字符串將通過控制台發送到另一個線程中的TCL(應用程序)。

我該如何進行這種交流?

我的想法是將TCL解釋器stdin更改為Qt控制台的stdout ,但是我不知道該怎么做!

在Tcl應用程序的localhost接口上創建一個網絡套接字,並偵聽來自Qt應用程序的命令(請參閱socketfileeventinfo complete )。 我建議您處理從屬解釋器( interp create )中收到的命令,以便可以輕松地沙沙遠程應用程序允許的命令。 要將字符串傳遞到Tcl應用程序,您的Qt應用程序可以只發送到套接字。 要接收數據,請發送命令以請求該數據並讀取響應。 如果確保僅在localhost接口上打開偵聽套接字,則可以消除大多數安全問題。 如果遇到問題或安排讀取命名管道,則可以考慮添加tls。 存在許多可能的進程間通信可能性,但通常套接字是最靈活的。

如果要捕獲Tcl解釋器的標准輸出(以及標准錯誤;一些重要消息!),則必須在子進程中運行Tcl解釋器,並通過管道與基於Qt / C ++的外部進程進行通信。 (您應該可以通過搜索Stack Overflow來找到一般的操作方法...)

特定於Tcl的詳細信息:您真的要確保Tcl解釋器可以:

fconfigure stdout -buffering line

這是因為在非交互模式下(例如在管道上使用時),Tcl將完全緩沖用於其標准輸出。 你要行緩沖(或者none用於緩沖輸出),這樣就可以立即看到價值時,他們寫出來。

您可能還希望運行自定義的REPL(假設Tcl 8.5或8.6):

fconfigure stdout -buffering line
while {[gets stdin line] >= 0} {
    set code [catch $line msg opt]
    puts [list $code $msg $opt]
}

將結果寫回的方式是作為Tcl列表(通常不太難解析),其中包含結果代碼(通常為0表示OK或1表示ERROR),結果消息/數據以及描述其他內容的鍵/值字典在發生錯誤的情況下,諸如堆棧跟蹤之類的“有趣”東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM