连接Qt GUI与TCL应用程序
Connecting Qt GUI with TCL application
我有一个Qt GUI和另一个使用TCL解释器与用户通信的应用程序。
我希望Qt和应用程序共享在应用程序中创建的信息,并在GUI中显示。这就是为什么我需要它们是同一个进程的线程(它们之间共享一个指针)。
另外,我希望Qt产生字符串,这些字符串将通过控制台发送到另一个线程中的TCL(应用程序)。
我怎样才能进行这种交流?
我的想法是改变TCL解释器stdin
为Qt控制台的stdout
,但我不知道如何做到这一点!
在Tcl应用程序的本地主机接口上创建一个网络套接字,并侦听来自Qt应用程序的命令(参见socket
、fileevent
和info complete
)。我建议您处理从解释器(interp create
)中接收到的命令,以便您可以轻松地对远程应用程序允许的命令进行沙箱处理。要将字符串传递给Tcl应用程序,Qt应用程序只需发送到套接字即可。要接收数据,请发送请求该数据的命令并读取响应。如果确保只打开本地主机接口上的侦听套接字,就可以消除大多数安全问题。如果遇到问题,可以考虑添加tls,或者安排读取命名管道。有很多可能的进程间通信的可能性,但通常套接字是最灵活的。
如果要捕获Tcl解释器的标准输出(和标准错误;),那么你必须在子进程中运行Tcl解释器,通过管道与外部基于Qt/c++的进程通信。(你应该能够找到如何做到这一点,一般通过搜索堆栈溢出…)
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),结果消息/数据,以及一个键/值字典,该字典描述了额外的"有趣"内容,如错误情况下的堆栈跟踪。
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- phytec phyBOARD iMX-6在从闪存而不是SD卡运行qt5 opengles应用程序时表现不佳(FPS减半
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何从Windows应用程序输出到标准?
- C++应用程序使用TCL API启用程序包自动加载
- GUI应用程序中的Tcl通道
- 连接Qt GUI与TCL应用程序