在get_children()
上使用Gtk::Container
会返回std::vector<Gtk::Widget*>
(容器中包含的小部件)。
Gtk::Entry
继承自Gtk::Widget
。当然,Gtk::Entry
无法调用get_text()
等特定Gtk::Widget
函数。
为了解决这个问题,我可以将Gtk::Widget
转换为Gtk::Entry
,但是你现在看到了问题,如果容器中有其他小部件我怎么处理,比如说{{1} }
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
答案 0 :(得分:5)
这是dynamic_cast
的用途:
if (auto p = dynamic_cast<Gtk::Entry*>(widgetOfTheEvilDead)) {
test = p->get_text();
}