0

我正在使用gtkmm4。我有一个 Gtk::Window、Gtk::Button 和 Gtk::HeaderBar。我已将 Button 打包到 HeaderBar 的末尾,然后将 Window 的标题栏设置为标题栏。我的代码看起来像这样:

class Window: public Gtk::ApplicationWindow
{

public:
    
    Window(){
        Gtk::Box box;
        Gtk::HeaderBar bar;
        Gtk::Button button{"Test Button"};

        button.signal_clicked().connect(sigc::mem_fun(*this, &Window::on_button_pressed));

        set_titlebar(bar);
        set_child(button);
    };

private:
    void on_button_pressed()
    {
        std::cout << "Button clicked!" << std::endl;
    };
};

出于某种原因,当我点击它时,按钮的点击信号没有激活,而我期望它会激活。我在这里做错了什么吗?先感谢您!

4

1 回答 1

1

根据您的示例,当您编写时:

Gtk::Button button{"Test Button"};

button变量是本地Window的,并在构造函数结束时消失。为避免这种情况,您有两种选择:

  1. Make 是Window班级成员。
  2. 用于Gtk::make_managed允许Window自动处理其子按钮的生命周期。

我很惊讶你甚至看到了这些小部件......我怀疑真正的代码是不同的......

于 2021-12-27T20:26:23.053 回答