如何从派生的小部件类内部获取父 Gtk::Window

How to get parent Gtk::Window from inside derived widget class?

本文关键字:获取 内部 Gtk Window 派生 小部      更新时间:2023-10-16

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

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

在这里抛开问题(这是针对 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 中应该有不同的方式?

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

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