gpt4 book ai didi

c++ - Gtk::Actionable Gtk::RadioToolButton?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:53:01 25 4
gpt4 key购买 nike

我正在使用 gtkmm 构建一个 UI。我要完成的任务是从已经是菜单和工具栏一部分的操作构建单选按钮。我想要新按钮来代理现有操作。

一个可能的候选者是 Gtk::Action::create_tool_item()。其文档说明:

Deprecated: 3.10: Use a Gtk::ToolItem and associate it with a Action using Gtk::Actionable::set_action_name() instead

因此,我希望 ToolItem 和通过继承 RadioToolButton 实现此接口(interface)。在 gtkmm-3.12 中没有,稳定文档也反射(reflect)了这一点。

但是,C 库 gtk-3.0 RadioToolButton 确实实现了这个接口(interface)。所以,我的问题是这样的。

gtkmm Gtk::RadioToolButton 应该实现 Gtk::Actionable 吗?缺少此接口(interface)是一种疏忽,还是有其他方式支持 Actionable 的功能?

有一个函数 set_related_action() 可以为单选按钮关联正确的图标。它似乎没有将按钮放入组中,它也被弃用了。

最佳答案

我也有同样的疑问。这当然没有尽可能清楚地记录下来。但是我在邮件列表(也许也是你的!)上发现了几个月后的一个线程,它回答了你的两个主要问题,我认为它值得为 future 走同样道路的人发帖。

总结一下:

Is the absence of this int erface an oversight

当然不是:这是一个深思熟虑的决定,原因非常重要。

or is there another way that the features of Actionable are supported?

谢天谢地,是的。

主题在这里 - https://mail.gnome.org/archives/gtkmm-list/2014-December/msg00002.html - 这是主要维护者的官方回应:

However, the gtkmm version, Gtk::Button does not inherit from Gtk::Actionable. Therefore the functionality is not available. There is a TODO in button.h:

//TODO: Derive from (and implement) Actionable when we can break ABI.

What does that mean? I thought that gtk3 and gtkmm3 were kept in sync, i.e. gtkmm3-3.14 would be feature-complete regarding gkt3-3.14? Is this functionality going to be implemented (when)?

[snip]

我们不能在不破坏 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

-- 默里卡明

注意:第一个参数需要是 GTK_ACTIONABLE( theButton.gobj() )。 GLib 风格的对象只是不透明的指针。 C++ 编译器无法在此类前向声明​​的 C struct 之间进行隐式转换(即使它们彼此包含为“基类”)。此外,因为这里我们必须从“对象”(GtkButton) 转换为“接口(interface)”(GtkActionable),所以隐式转换不起作用:接口(interface)可以是位于其父对象内的任何位置,因此必须在转换期间调整地址。 GTK_BLAH() 宏涵盖了这一点。

无论如何,我跑题了... gtkmm 4 可以不受惩罚地破坏 ABI,并且 GTK+ 4 开发已经开始,所以 Actionable 接口(interface)现在由 GtkButton 实现。所有或大多数其他需要 ABI 中断的 TODO 现在也应该得到解决。如果您发现 gtkmm 3 中缺少某些内容且尚未添加到 4 中,请提交错误报告以对其进行排序。

关于c++ - Gtk::Actionable Gtk::RadioToolButton?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25046313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com