如何从派生的widget类中获取父Gtk :: Window?

时间:2015-01-02 09:09:55

标签: c++ gtkmm

我有一个继承自Gtk::Box的类,因此我可以在运行时创建它的多个实例,并将它们动态添加到Gtk::Notebook

但是如果出现严重错误,我想弹出一条不会在主窗口后面消失的消息,所以我需要从派生的Gtk::Box类中获取父窗口。

关闭the question here(适用于GTK,不适用于gtkmm),我这样做了:

Gtk::Container *parent = this->get_toplevel();
if (parent->get_is_toplevel()) {
    Gtk::MessageDialog dlg(*parent, "blah");
    dlg.run();
}

但是我收到一个错误,告诉我“没有已知的从Gtk :: Container到Gtk :: Window的转换”。

我是否应该使用dynamic_cast<>Gtk::Container强制转换为Gtk::Window?如果是这样,是否没有必要致电get_is_toplevel()? (因为这与检查dynamic_cast<>)的结果相同。

或者在gtkmm中应该采用不同的方法吗?

1 个答案:

答案 0 :(得分:1)

嗯,这很有效,但我不知道它是否正确:

Gtk::Window *parent = dynamic_cast<Gtk::Window *>(this->get_toplevel());
if (parent) {
    Gtk::MessageDialog dlg(*parent, "blah");
    dlg.run();
}