我开始学习gtkmm库,可能不了解它的工作方式。问题在于:我从gtkmm tutorial复制了简单的示例,并希望通过单击按钮修改它以创建任意数量的窗口。
为什么我不能像下面的函数on_button_clicked()
那样编写代码?
class Hello : public Gtk::Window {
public:
Hello() :m_button("create copy") {
set_border_width(20);
m_button.signal_clicked().connect(sigc::mem_fun(*this, &Hello::on_button_clicked));
add(m_button);
show_all_children();
}
protected:
void on_button_clicked();
Gtk::Button m_button;
};
void Hello::on_button_clicked() {
Hello new_window;
new_window.show();
}
int main (int argc, char *argv[])
{
auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example");
Hello hw;
return app->run(hw);
}
答案 0 :(得分:0)
未显示新窗口的原因是方法Hello::on_button_clicked()
中如何使用C ++。
该行:
Hello new_window;
创建一个具有局部范围的新窗口。
new_window.show();
这标志着当GTK +重新掌控时显示的窗口。
该行
}
退出方法并销毁所有局部变量。这意味着new_window
在被查看之前就被删除了。
要保持窗口并显示该对象必须存储,以便不会自动销毁它。这可以在堆上分配,并在另一个类中保存一个指针,以便于访问窗口。