【问题标题】:How to get parent Gtk::Window from inside derived widget class?如何从派生的小部件类中获取父 Gtk::Window?
【发布时间】:2015-01-02 09:09:54
【问题描述】:

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

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

我是否应该使用dynamic_cast<>Gtk::Container 类型转换为Gtk::Window?如果是这样,是不是没有必要打电话给get_is_toplevel()? (因为这有点像检查dynamic_cast<> 的结果)。

或者在 gtkmm 中应该有不同的方法吗?

【问题讨论】:

  • static_cast<Gtk::Window> 似乎有效,因此可能不需要dynamic_cast。我猜dynamic 在理论上更安全,但static 可能没问题,只要您确定顶层是Window,我就是这样做的。 :)

标签: c++ gtkmm


【解决方案1】:

嗯,这行得通,但我不知道它是否正确:

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

【讨论】:

  • static_cast&lt;Gtk::Window&gt; 似乎有效,因此可能不需要dynamic_cast。我猜dynamic 在理论上更安全。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
  • 1970-01-01
  • 2017-05-25
相关资源
最近更新 更多