gtkmm4:在 Gtk::HeaderBar 中时,Gtk::Button 点击信号不会触发
Posted
技术标签:
【中文标题】gtkmm4:在 Gtk::HeaderBar 中时,Gtk::Button 点击信号不会触发【英文标题】:gtkmm4: Gtk::Button click signal doesn't fire when in Gtk::HeaderBar 【发布时间】:2021-12-27 19:52:56 【问题描述】:我正在使用 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;
;
;
由于某种原因,当我点击它时,按钮的点击信号没有激活,而我期望它会激活。我在这里做错了什么吗?提前谢谢!
【问题讨论】:
非常抱歉!仔细观察,您似乎是对的。我也不确定我是如何显示小部件的,我猜是 Gtkmm4 的一个怪癖,但谢谢!您可以重新发布您的原始解决方案,不便之处请见谅。我仍然不确定 why 将其添加到标题栏并将其设置为窗口的子项会更改信号的处理方式,但我想给将来可能成为我的人的教训,将所有小部件添加到窗口作为成员。 【参考方案1】:根据你的例子,当你写的时候:
Gtk::Button button"Test Button";
button
变量是 local 并在 Window
构造函数结束时消失。为避免这种情况,您有两种选择:
-
Make 是
Window
类成员。
使用Gtk::make_managed
允许Window
自动处理其子按钮的生命周期。
我很惊讶你竟然看到了这些小部件......我怀疑真正的代码是不同的......
【讨论】:
以上是关于gtkmm4:在 Gtk::HeaderBar 中时,Gtk::Button 点击信号不会触发的主要内容,如果未能解决你的问题,请参考以下文章