gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 00:32:04 24 4
gpt4 key购买 nike

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

一个Gtk::Entry继承自 Gtk::Widget .当然具体Gtk::Entryget_text()这样的功能不能被 Gtk::Widget 调用.

为了解决这个问题,我可以使用 Gtk::WidgetGtk::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();
}

关于c++ - 如何测试 get_children() 返回的小部件的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32288493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com