我在C ++中遇到Gtkmm条目的奇怪问题 我在这里定义了一个名为inputEntry的Gtk :: Entry。我有一个名为csf的函数。
我在main中声明条目:
// Create input entry
Gtk::Entry inputEntry;
inputEntry.set_editable(TRUE);
inputEntry.set_text("3.55");
inputEntry.signal_activate().connect(sigc::bind<float>(sigc::ptr_fun(&csf), atof(inputEntry.get_text().c_str())));
我稍后将此条目附加到网格,然后将该网格添加到主窗口,然后显示网格上的所有小部件,然后显示网格本身。
我宣布CSF(代码开头有一个原型):
void csf(float sa)
{
printf("%f \n", sa);
}
然而,奇怪的是,当我运行程序时,无论我输入Gtk :: Entry,终端在提交时总是显示3.55。我尝试将set_text更改为&#34; 1.11&#34;,当我提交时它总是显示1.11。我甚至尝试将第二个set_text放到&#34; 1.11&#34;,它总是会显示1.11,然后,我尝试完全没有set_text,它总是会显示0.条目的值,无论是什么我键入的内容,无论是300000还是0.1,总是显示打印初始值,只显示Gtk :: Entry的初始值。有什么问题?
注意:我以前用Python完成了这个,几乎是一样的,并且它有效。我想尝试用C ++做。也许是因为我没有实现某些东西?
答案 0 :(得分:2)
这是C ++问题,而不是一个问题。
排队:
inputEntry.signal_activate().connect(sigc::bind<float>(sigc::ptr_fun(&csf), atof(inputEntry.get_text().c_str())));
您正在使用从字符串“3.55”创建的double调用函数csf
。为了得到你想要的东西:
inputEntry.signal_activate().connect(sigc::bind<Gtk::Entry*>(sigc::ptr_fun(&csf), &inputEntry));
(...)
void csf(Gtk::Entry* entry)
{
std::cout<<atof(entry.get_text().c_str())<<" "<<std::endl;
}
激活后必须将条目文本更改为double。在您的解决方案中,它处于信号连接状态。