我正在使用gtkmm构建UI。我要完成的任务是从已经是菜单和工具栏一部分的 Action 构造一个单选按钮。我希望新按钮可以替代现有操作。
一个可能的候选对象是Gtk::Action::create_tool_item()。其文档指出:
因此,我希望ToolItem以及通过继承RadioToolButton可以实现此接口(interface)。在gtkmm-3.12中没有,稳定的文档也反射(reflect)了这一点。
但是,C库gtk-3.0 RadioToolButton确实实现了此接口(interface)。所以,我的问题是这个。
gtkmm Gtk::RadioToolButton应该实现Gtk::Actionable吗?缺乏这种接口(interface)是一种疏忽,还是通过另一种方式支持Actionable的功能?
有一个函数set_related_action()可以为单选按钮关联正确的图标。它似乎没有将按钮放入组中,并且也已弃用。
最佳答案
我有同样的问题。当然,没有尽可能清楚地记录下来。但是我在发邮件列表后的几个月中在邮件列表中找到了一个线程(也许也是您的!),它回答了您的两个主要问题,我认为值得以后以同样的方式发帖的人。
总结一下:
当然不是:出于极其重要的原因,这是一个故意的决定。
谢天谢地,是的。
线程在这里-https://mail.gnome.org/archives/gtkmm-list/2014-December/msg00002.html-这是主要维护者的官方回复:
我们不能在不破坏ABI 的情况下将基类添加到C++类中-
通常意味着导致当前使用该ABI的所有应用程序
坠毁。 显然,我们不想这样做。 当我们
进行并行安装,例如当我们从gtkmm-2.4转到
gtkmm-3.0,它不影响当前安装的应用程序。
您可以同时执行以下操作:
gtk_actionable_set_action_name(theButton.gobj(),“somename”);
看到:
https://developer.gnome.org/gtkmm-tutorial/stable/sec-basics-gobj-and-wrap.html.en
-默里·卡明(Murray Cumming)
注意:第一个参数必须是GTK_ACTIONABLE( theButton.gobj() )
。 GLib样式的对象仅是不透明的指针。 C++编译器无法在此类前向声明的C struct
之间进行隐式转换(即使它们彼此包含为“基类”)。此外,因为在这里我们必须从“对象”(GtkButton
)转换为“接口(interface)”(GtkActionable
),所以隐式转换将不起作用:接口(interface)可以位于其父对象内的任何位置,因此必须在 Actor 。 GTK_BLAH()
宏涵盖了这一点。
无论如何,我离题... gtkmm 4可以不受惩罚地破坏ABI,并且GTK + 4的开发已经开始,因此Actionable接口(interface)现在由GtkButton
实现。现在也应该解决所有或大多数其他需要ABI中断的此类TODO
。如果您发现gtkmm 3中缺少但尚未添加到4中的某些东西,请提交错误报告以对其进行排序。
关于c++ - Gtk::可执行Gtk::RadioToolButton吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25046313/