1

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

我执行以下操作

插件.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 的实例嵌入到套接字中?

4

1 回答 1

0

文档中所述:

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

所以你的代码应该是:

window.add(box);
socket.add_id(plug.id);
于 2019-04-09T11:18:20.247 回答