Gtk::可操作的Gtk:: RadioToolButton
Gtk::Actionable Gtk::RadioToolButton?
我使用gtkmm来构建一个UI。我试图完成的任务是从已经是菜单和工具栏的一部分的操作构造一个单选按钮。我想让新按钮代理现有的操作。
一个可能的候选是Gtk::Action::create_tool_item()。它的文档说明:
已弃用:3.10:使用Gtk::ToolItem并使用Gtk::Actionable::set_action_name()将其与Action关联
所以,我希望ToolItem和继承的RadioToolButton会实现这个接口。在gtkmm-3.12中没有,稳定文档也反映了这一点。
然而,C库gtk-3.0 RadioToolButton确实实现了这个接口。所以,我的问题是:
gtkmm Gtk::RadioToolButton应该实现Gtk::Actionable吗?缺少这个接口是一种疏忽,还是有其他方式支持Actionable功能?
有一个函数set_related_action(),它为单选按钮关联正确的图标。它似乎没有将按钮放入组中,并且也不推荐使用。
我也有同样的问题。这一点当然没有尽可能清晰地记录下来。但是我在邮件列表(也许也是你的!)上发现了一个几个月后的帖子,它回答了你的两个主要问题,我认为它值得发布给未来走同样道路的人。
总结:
没有这个int接口是一个疏忽吗
当然不是:这是一个深思熟虑的决定,出于一个极其重要的原因。
或者是否有其他方式支持Actionable功能?
值得庆幸的是,是的。
线程在这里- https://mail.gnome.org/archives/gtkmm-list/2014-December/msg00002.html -这是主要维护者的官方响应:
然而,gtkmm版本,Gtk::Button不继承自Gtk::可操作的。因此,该功能不可用。有在button.h:
中为TODO//TODO:当我们可以破坏ABI时,派生(并实现)Actionable
那是什么意思?我以为gtk3和gtkmm3是同步的,也就是说,gtkmm3-3.14将是gkt3-3.14的功能完整?是这个功能将被实现(什么时候)?
(剪)我们不能在不破坏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
)强制转换到一个"接口"(GtkActionable
),隐式强制转换将不起作用:接口可以位于其父对象中的任何位置,因此必须在强制转换期间调整地址。GTK_BLAH()
宏涵盖了这一点。
GtkButton
实现。所有或大多数其他需要ABI中断的TODO
现在也应该得到解决。
- 如何在运行中期切换GTK CSS style_context
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 如何使用 GTK 3 正确设置默认文本
- Gtkmm 会不断检查 Gtk::日历上的所选日期是否发生变化
- 使用 Gtkmm 以编程方式选择 Gtk::TextView 中的文本
- 是否可以编译 Gtk+ 应用程序以同时在 Gtk 2 和 3 上运行
- GTK 最大化表单 C++
- GTK:完全摆脱系统主题/CSS
- GTK C++:找不到信号处理程序 您是否使用 -rdynamic 进行了编译?
- 如何从 Gtk::窗口调用派生对象的析构函数
- Gtk::带有set_icon_name的窗口图标集在 wayland 上不起作用
- GTK 3 C++按钮中带有标签的图标
- Gtkmm:创建一个Gtk::ComboBox,其中列出Gtk::DrawingArea
- 用GTK创建逻辑门模拟器,如何制作放置区域
- 使用 GTK 将 EGL 图像渲染到帧缓冲区
- 在 Win32 应用程序中承载 GTK+3 上下文
- 实时移动GTK+窗口
- 基于人脸检测坐标的GTK+移动窗口
- 如何在Visual Studio c++ for Linux平台中编写GTK应用程序
- Gtk::可操作的Gtk:: RadioToolButton