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

时间:2015-08-29 16:52:58

标签: c++ c++14 gtkmm

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

1 个答案:

答案 0 :(得分:5)

这是dynamic_cast的用途:

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