2015-01-02 2 views
0

У меня есть класс, наследующий от Gtk::Box, поэтому я могу создать несколько экземпляров его во время выполнения и добавить их динамически в Gtk::Notebook.Как получить родительский Gtk :: Окно изнутри производного класса виджета?

Однако, если есть критическая ошибка, я хочу вывести сообщение, которое не исчезнет за главным окном, поэтому мне нужно получить родительское окно из моего производного класса 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 ::Окно".

Должен ли я использовать dynamic_cast<> для получения типа Gtk::Container в Gtk::Window? Если это так, не нужно ли звонить get_is_toplevel()? (Потому что это то же самое, что и проверка результата dynamic_cast<>).

Или есть другой способ, которым это должно быть сделано в gtkmm?

+0

'' static_cast , кажется, работает, так что не может быть потребность в 'dynamic_cast'. Я полагаю, что «динамический» теоретически более безопасен, но «статический», вероятно, прекрасен, пока вы точно знаете, что топлесс - это «окно», которое я делаю. :) –

ответ

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'. Я думаю, что «динамический» теоретически более безопасен. –

Смежные вопросы