gtkmm4:Gtk::Button 在 Gtk::HeaderBar 时点击信号不会触发
gtkmm4: Gtk::Button click signal doesn't fire when in Gtk::HeaderBar
我正在使用 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;
};
};
由于某种原因,当我按预期点击按钮时,按钮的点击信号没有激活。我在这里做错了什么吗?提前致谢!
根据你的例子,当你写:
Gtk::Button button{"Test Button"};
button
变量是 local 并且在 Window
构造函数结束时死亡。为避免这种情况,您有两种选择:
- Make 是
Window
class 成员。
- 使用
Gtk::make_managed
允许Window
自动处理其子按钮的生命周期。
我很惊讶你竟然看到了这些小部件......我怀疑真正的代码是不同的......
我正在使用 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;
};
};
由于某种原因,当我按预期点击按钮时,按钮的点击信号没有激活。我在这里做错了什么吗?提前致谢!
根据你的例子,当你写:
Gtk::Button button{"Test Button"};
button
变量是 local 并且在 Window
构造函数结束时死亡。为避免这种情况,您有两种选择:
- Make 是
Window
class 成员。 - 使用
Gtk::make_managed
允许Window
自动处理其子按钮的生命周期。
我很惊讶你竟然看到了这些小部件......我怀疑真正的代码是不同的......