我正在使用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/

10-13 09:12