Gtkmm 3.0 条目 get_text 总是 returns 相同的初始文本

Gtkmm 3.0 Entry get_text always returns the same initial text

我在使用 C++ 中的 Gtkmm 条目时遇到一个奇怪的问题。
我在这里定义了一个Gtk::Entry,叫做inputEntry。我有一个名为 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())));

稍后我将此条目附加到一个网格,然后将该网格添加到主网格 window,然后显示网格上的所有小部件,然后是网格本身。

我声明CSF的地方(代码开头有原型):

void csf(float sa)
{
    printf("%f \n", sa);
}

然而,奇怪的是,当我 运行 程序时,无论我在 Gtk::Entry 中输入什么,提交时终端总是显示 3.55。我尝试将 set_text 更改为“1.11”,但提交时它始终显示 1.11。我什至尝试将第二个 set_text 设置为“1.11”,它总是显示 1.11,然后,我尝试完全不使用 set_text,它总是显示 0。条目的值,不管我输入什么,无论是 300000 还是 0.1,总是显示打印初始值并且只显示 Gtk::Entry 的初始值。怎么了?

注意:我以前在 Python 中做过这个,方法几乎相同,而且很有效。我想尝试用 C++ 来做。可能是我没有实现什么?

这是 C++ 问题,不是 gtk 问题。

行内:

inputEntry.signal_activate().connect(sigc::bind<float>(sigc::ptr_fun(&csf), atof(inputEntry.get_text().c_str())));

您正在使用从字符串“3.55”创建的双精度调用函数 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;
}

必须在激活后将条目的文本更改为双精度。在您的解决方案中,它处于信号连接处。