如何从派生小部件类中获取父 Gtk::Window?
How to get parent Gtk::Window from inside derived widget class?
我有一个继承自 Gtk::Box
的 class,因此我可以在运行时创建它的多个实例并将它们动态添加到 Gtk::Notebook
。
但是,如果出现严重错误,我想弹出一条不会在主 window 后面消失的消息,所以我需要从派生的 window 中获取父级 window Gtk::Box
class.
离开 the question here(这是针对 GTK,而不是针对 gtkmm),我这样做了:
Gtk::Container *parent = this->get_toplevel();
if (parent->get_is_toplevel()) {
Gtk::MessageDialog dlg(*parent, "blah");
dlg.run();
}
但是我收到一条错误消息,告诉我有 "no known conversion from Gtk::Container to Gtk::Window"。
我是否应该使用 dynamic_cast<>
将 Gtk::Container
类型转换为 Gtk::Window
?如果是这样,是不是就不用调用get_is_toplevel()
了? (因为这与检查 dynamic_cast<>
的结果有点相同)。
或者在 gtkmm 中应该有不同的方法吗?
嗯,这行得通,但我不知道它是否正确:
Gtk::Window *parent = dynamic_cast<Gtk::Window *>(this->get_toplevel());
if (parent) {
Gtk::MessageDialog dlg(*parent, "blah");
dlg.run();
}
我有一个继承自 Gtk::Box
的 class,因此我可以在运行时创建它的多个实例并将它们动态添加到 Gtk::Notebook
。
但是,如果出现严重错误,我想弹出一条不会在主 window 后面消失的消息,所以我需要从派生的 window 中获取父级 window Gtk::Box
class.
离开 the question here(这是针对 GTK,而不是针对 gtkmm),我这样做了:
Gtk::Container *parent = this->get_toplevel();
if (parent->get_is_toplevel()) {
Gtk::MessageDialog dlg(*parent, "blah");
dlg.run();
}
但是我收到一条错误消息,告诉我有 "no known conversion from Gtk::Container to Gtk::Window"。
我是否应该使用 dynamic_cast<>
将 Gtk::Container
类型转换为 Gtk::Window
?如果是这样,是不是就不用调用get_is_toplevel()
了? (因为这与检查 dynamic_cast<>
的结果有点相同)。
或者在 gtkmm 中应该有不同的方法吗?
嗯,这行得通,但我不知道它是否正确:
Gtk::Window *parent = dynamic_cast<Gtk::Window *>(this->get_toplevel());
if (parent) {
Gtk::MessageDialog dlg(*parent, "blah");
dlg.run();
}