2009-07-26 59 views
2

有什么方法可以打开Qt进程,然后以编程方式添加小部件?例如,启动一个进程打开一个框架,然后通过另一个程序(这是我的;实际上是另一种脚本语言)的调用,向该框架添加一个按钮?动态操纵Qt GUI

因此,在其他程序中,我说:“开放式框架”的提示,并在框架中打开。然后我说“添加按钮”,刚刚打开的框架会填充一个按钮。

更新地址评论。 更新后添加示例。

+0

孩子的过程不是你的,是吗? (所以它不能为任务设计) – Eugene 2009-07-26 07:56:31

回答

0

该功能不是内置在Qt应用程序(或任何其他窗口AFAIK fraemwork),但你可以在建立它自己,如果你正在创建这两个程序。

+0

很高兴听到这是可能的 - 谢谢! – Jeff 2009-07-26 16:50:35

0

开始这样做的最好的方法就是使用QSharedMemory访问这两个进程相同的内存,然后你的描述应该是完全可能的。

+0

我看到一个示例@ http://doc.trolltech.com/main-snapshot/ipc-sharedmemory.html,这对于可加载内存的东西是有意义的,但是如何调用?因此,在另一种语言中,我使用脚本语言说“开放框架”,并打开框架。然后我说“添加按钮”,刚刚打开的框架会填充一个按钮。这似乎是正确的轨道,虽然.... – Jeff 2009-07-26 16:55:58

+0

并感谢您的答复 - 恭喜最近的参与。 – Jeff 2009-07-26 16:57:34

+1

你只需要将正确的地址转换为指针。在这种情况下,您可能会将地址转换为QFrame,然后您可以调用它的函数。您需要小心分配以确保您分配到共享内存中。 – 2009-07-26 18:10:41

0

如果你能够让其他的应用程序,由主应用程序加载的DLL /共享库。
然后只需要在dll中有一个方法绘制菜单或绘制框架。主应用程序检查dll是否存在并加载它,然后可以检查gui方法是否存在 - 这是实现gui插件的常用方法。

0

最简单的方法是从主程序公开一组的功能(即绘制一个),并从“客户”加载它们,只是叫他们时,你需要。

需要更多工作的另一种方法是使用某种进程间通信(例如共享内存,套接字,d-bus等,您可以使用Qt提供的实现或):

使用套接字将有主程序

简化示例监听套接字等待命令并调用正确的函数对每个命令。而另一个程序在接收到来自提示符的命令后与它进行通信。

1

如前所述,这是可能的。如果您需要特定于域的脚本语言,我推荐使用QtScript module。它基于ECMAScript 262,可以访问信号,插槽和其他东西。

虽然您可以使用IPC或TCP来控制应用程序,但Qxt提供QxtRPCPeer,可用于连接通过QIODevice连接的应用程序(如TCP或本地连接)之间的信号和插槽。