Gtkmm 3.0 Entry get_text总是返回相同的初始文本

Gtkmm 3.0 Entry get_text always returns the same initial text

本文关键字:返回 文本 Entry get text Gtkmm      更新时间:2023-10-16

我在c++中遇到了一个奇怪的问题。
我在这里定义了一个名为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更改为"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;
}

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