GTK+ Toggle动作

Posted

技术标签:

【中文标题】GTK+ Toggle动作【英文标题】:GTK+ ToggleAction 【发布时间】:2012-07-07 04:00:29 【问题描述】:

我正在为我正在进行的项目开发一个带有 gtkmm/C++ 的 UI。我对 GTK 完全陌生。对于这个程序,我需要多线程,为此我使用 Glib::Threads 对象。第二个线程将被打开和关闭,以便用户可以控制程序的执行;自然地,Gtk::ToggleAction 这个名字让我很好奇,但我一直没能弄清楚这到底是做什么的。是否可以从处理我的线程的 ToggleAction 派生一个类?

谢谢! 克里斯

【问题讨论】:

【参考方案1】:

Gtk::ToggleAction 是用于“基于动作的菜单和工具栏”的类集的一部分:http://developer.gnome.org/gtk3/stable/Actions.html

特别是,GtkToggleAction 表示具有开/关切换状态的动作。这更多是关于抽象“动作”的概念,可以同时由任意数量的 UI 元素(菜单检查项、切换按钮等)可视化。您当然可以使用由更改 Gtk::ToggleAction 触发的事件来决定暂停/取消暂停线程,方法是继承 Gtk::ToggleAction 或使用引用 Gtk::ToggleAction 实例的新类组合。

【讨论】:

目前我正在使用 Gtk::ToggleButton;我相信这对我的目的同样有效。假设我的程序员将在 UI 驱动程序中处理多线程是否公平?感谢您的回复。 如果你想设计一个响应式 UI,那么你需要学习在不阻塞 UI 线程的情况下以一种或另一种形式做事。不管是后台线程、异步 API,你都有什么。 我已经在研究使用 pthreads 的解决方案。它非常适合我的需求;我从来没有写过 GUI,我不确定 GTK 是否有能力处理这些简单的多线程场景。感谢您的回复,我现在知道我需要自己处理。【参考方案2】:

与所有其他 UI 系统一样,GTK 的非阻塞 UI 使用事件驱动架构。执行此操作的标准方法是拥有一个用于事件处理的主线程和一个用于绘制的第二个线程。大多数像“另存为”对话框这样的窗口都以不同的方式处理,因此您不需要为此使用线程。 如果您正在开发新应用程序,请考虑使用 GTK3 接口。 GtkAction 已被弃用。请改用 GAction 和 GMenu 界面。

https://developer.gnome.org/gio/stable/GAction.html#GAction-struct

【讨论】:

【参考方案3】:

或者,您可以在 Advanced Gtk+ Sequencer 的 gobject 中使用我的线程实现:

http://ags.sf.net http://ags.sourceforge.net/api/ags/ags-AgsThread.html

此实现提供暂停和恢复线程。 当然你可以扩展 GtkToggleButton 对象。

这可能是最重要的功能

g_type_class_peek_parent(klass);

【讨论】:

以上是关于GTK+ Toggle动作的主要内容,如果未能解决你的问题,请参考以下文章

Unity UGUI - Toggle 切换开关

Unity UGUI - Toggle 切换开关

SwiftUI:如何将 .toggle() not Toggle(isOn..) 与 UserDefault 结合使用

unity动态为多个toggle添加事件

使用闭包实现点击按钮切换 toggle

JQuery 的toggle() 方法