如何测试 get_children() 返回的小部件类型?

how to test the type of the widgets returned by get_children()?

Gtk::Container returns std::vector<Gtk::Widget*>(容器包含的小部件)上使用 get_children()

a Gtk::Entry 继承自 Gtk::Widget。当然,像 get_text() 这样的特定 Gtk::Entry 函数不能被 Gtk::Widget.

调用

为了解决这个问题,我可以将Gtk::Widget转换为Gtk::Entry,但是你现在看到问题了,如果容器中有其他小部件我该如何处理,比如说Gtk::Button ?

  for ( auto* widgetOfTheEvilDead : ContainerCoffin->get_children() ) 
  {
    if ( widgetOfTheEvilDead->get_visible() /*shared by all widget*/ )
    {
      // do something if i'm an entry, e.g.:
      text = static_cast<Gtk::Entry*>( widgetOfTheEvilDead )->get_text();

      if ( text == "Rotting Christ")
        this->music->play("Lucifer Over Athens");
    }

  }

为了完整起见,在我的例子中,我没有使用 Gtk::Entry,而是我自己的小部件继承自 Gtk::Entry :

class Tombstone
: public Gtk::Entry
{
.
.
.
}

这就是 dynamic_cast 的用途:

if (auto p = dynamic_cast<Gtk::Entry*>(widgetOfTheEvilDead)) {
    test = p->get_text();
}