2015-01-02 28 views
0

我有一个继承自Gtk::Box的类,所以我可以在运行时创建它的多个实例,并将它们动态添加到Gtk::Notebook如何从派生窗口小部件类中获取父Gtk :: Window?

但是,如果出现严重错误,我想弹出一条不会消失在主窗口后面的消息,所以我需要从派生的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 ::容器的Gtk没有已知的转换::窗口”。

我是否应该用dynamic_cast<>来将Gtk::Container转换为Gtk::Window?如果是这样,是不是可以拨打get_is_toplevel()? (因为这与检查dynamic_cast<>的结果是一样的)。

还是有不同的方式,这应该在gtkmm完成?

+0

'的static_cast '似乎工作,所以有可能不是一个需要'dynamic_cast'。我认为'动态'虽然在理论上更安全,但只要你确定顶层是一个'Window','static'就可以,尽管我知道。 :) –

回答

1

那么这个工作,但我不知道它是否是正确与否:

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

'static_cast '似乎工作,所以可能不需要'dynamic_cast'。我想'动态'虽然理论上更安全。 –

相关问题