在 gtkmm 中创建多个 windows
Creating multiple windows in gtkmm
我开始学习 gtkmm 库,可能不了解它的工作方式。这就是问题所在:我从 gtkmm tutorial 复制了一个简单的示例,并希望通过单击按钮对其进行修改以创建任意数量的 windows。
为什么我不能像下面的函数 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);
}
未显示新 window 的原因是 C++ 在方法 Hello::on_button_clicked()
.
中的使用方式
行:
Hello new_window;
创建一个具有本地作用域的新 window。
new_window.show();
这标志着 window 在 GTK+ 重新控制时显示。
行
}
退出方法,所有局部变量都被销毁。这意味着 new_window
还没有被看到就被删除了。
要保留 window 并显示它,必须存储对象以使其不会自动销毁。这可以在堆上分配,并在另一个 class 中保存一个指向它的指针,以便于访问 window.
我开始学习 gtkmm 库,可能不了解它的工作方式。这就是问题所在:我从 gtkmm tutorial 复制了一个简单的示例,并希望通过单击按钮对其进行修改以创建任意数量的 windows。
为什么我不能像下面的函数 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);
}
未显示新 window 的原因是 C++ 在方法 Hello::on_button_clicked()
.
行:
Hello new_window;
创建一个具有本地作用域的新 window。
new_window.show();
这标志着 window 在 GTK+ 重新控制时显示。
行
}
退出方法,所有局部变量都被销毁。这意味着 new_window
还没有被看到就被删除了。
要保留 window 并显示它,必须存储对象以使其不会自动销毁。这可以在堆上分配,并在另一个 class 中保存一个指向它的指针,以便于访问 window.