2015-01-02 22 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'。我想'動態'雖然理論上更安全。 –

相關問題