【发布时间】:2009-01-06 23:21:17
【问题描述】:
自从我使用 GTK+ 以来已经有一段时间了,最后一次是在 C 中,而不是像现在这样使用 gtkmm 和 C++。无论如何,我有一个我认为应该很容易解决的问题:
我有一个由单选按钮列表组成的弹出菜单,当我单击其中一个按钮时,我希望执行一些操作。代码如下:
Gtk::RadioMenuItem::Group group;
for ( size_t i = 1; i < LH_MAX; ++i )
{
Gtk::RadioMenuItem* pItem = new Gtk::RadioMenuItem( group, names[i], names[i] );
pItem->set_name( names[i] );
pItem->signal_activate().connect( sigc::mem_fun(*this, &MyClass::on_item_activated) );
pItem->show();
m_Menu.append( *Gtk::manage(pItem) );
}
我看到的唯一问题是,当从菜单中选择以前未选中的单选按钮时,MyClass::on_item_activated 会被调用两次。当点击已经选中的单选按钮时,它只会被调用一次。
我猜第一次触发是说“某些东西不再激活”,第二次触发是为了激活新的单选按钮。不管我是对是错,问题都是一样的:我怎样才能让我的处理程序每次点击只采取一次行动?要么我需要处理程序只被调用一次,要么我需要从它内部检查以了解回调是否是“重复的”。
【问题讨论】: