首页 > 解决方案 > 如何在 Gtk 套接字中嵌入 Gtk::Plug?

问题描述

我有我的窗户。在这个窗口中,我想要两个按钮。一个是插头,另一个是正常的。

我执行以下操作

插件.cc

#include <gtkmm.h>
#include <gtkmm/plug.h>

class PlugButton : public Gtk::Plug{
public:
    PlugButton(){add(button); id = get_id();}
    int id;
    Gtk::Button button{"Plug Button"};
}  

主文件

Gtk::HBox box;
Gtk::Button button{"Normal Button"};
Gtk::Socket socket;// I have included gtkmm/socket.h
PlugButton plug;
box.pack_start(button);
box.pack_end(socket);
socket.add_id(plug.id);
window.add(box);
window.show_all_children();

这可以编译,但我得到

gtk_socket_add_id: assertion '_gtk_widget_get_anchored (GTK_WIDGET (socket))' failed

如何将 Gtk::Plug 的实例嵌入到套接字中?

标签: c++gtk3gtkmm3xembed

解决方案


文档中所述:

GtkSocket 必须已经添加到顶层窗口中,然后才能进行此调用。

所以你的代码应该是:

window.add(box);
socket.add_id(plug.id);

推荐阅读