У меня есть класс, наследующий от 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?
'' static_cast, кажется, работает, так что не может быть потребность в 'dynamic_cast'. Я полагаю, что «динамический» теоретически более безопасен, но «статический», вероятно, прекрасен, пока вы точно знаете, что топлесс - это «окно», которое я делаю. :) –