【发布时间】:2013-05-19 19:07:14
【问题描述】:
我正在用 GTK+2.0 GUI 用 C 语言开发一个简单的应用程序,当然,在 Linux 上,这个应用程序旨在控制通过 USB 端口连接的设备,并使用 FTDI 驱动程序通过 USB 模拟 RS232 异步协议港口。
我想创建事件驱动的控件,例如 GTK 中用于检测按钮何时被单击等的信号。我为此找到了 glib 库,我在文档中阅读了它似乎很清楚。我知道我必须使用 g_io_add_watch() 之类的函数来添加要检测的事件,我可以定义我的函数将由该事件“触发”,例如“G_IO_IN”意味着它将在有一些输出时触发设备。我只是在网上找不到任何有用的例子。
另一件事是,我不明白如何同时使用 GTK+2.0 和 glib,因为它们都有自己的程序循环来检测事件(GTK+2.0 的 gtk_main() 和 glib 中的 GMainLoop)。
如果您分享一些有趣的示例、链接、教程等,我会非常高兴。也许我需要知道更具体的词汇,因为我在网上找不到任何有用的东西来解决这个问题。 谢谢!
【问题讨论】:
-
GTK+ 使用 glib,因此对于 GUI 内容,您很少需要直接使用 glib API。一个值得注意的例外是
g_signal_connect()系列函数,用于将 GTK+ 信号处理程序连接到您的图形元素(例如单击示例中的按钮时),因为过时的gtk_signal_connect()在很久以前就已经贬值了。另一方面,gtk_main()仍然是启动主 GUI 循环的首选方式。 -
是的,我正在使用
g_signal_connect()来定义 GUI 事件,我只是不确定如何集成对 ftdi 驱动程序信号的检测,因此可以使用像 G_OBJECT 这样的设备来使用g_signal_connect()创建一个事件? -
哦,我明白了,很遗憾,我无法帮助您处理 ftdi 驱动程序信号(没有足够的经验)。但是要发出 GTK+ 信号,请查看
g_signal_emit_()系列函数,以及它们周围的文档。您还可以创建、发出和处理自己的 GTK+ 信号(如果我没记错的话,通过marshallers)。 -
我明白了,所以似乎可以定义自定义 GTK+ 信号,我查找了关键字
marshallers。问题还没有解决,但是谢谢,至少我不再走投无路了。