Gtkmm 3.0 Entry get_text总是返回相同的初始文本
Gtkmm 3.0 Entry get_text always returns the same initial text
我在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。在您的解决方案中,它是在信号连接。
相关文章:
- 如何在C++中以这种方式返回一行文本?
- 返回从字符串文本创建的静态string_view是否安全?
- fscanf 在尝试返回文本文件的第一行时返回 -1
- 基于模板字符串文本返回的 c++ 函数指针
- std::string::find 为取消引用的迭代器和等效字符串文本返回不同的值
- 我想读取文本文件中的所有内容(但文本文件中只有一个双精度值),转换为双精度值并返回值
- FindResource 调用返回 RCDATA 类型的文本文件的 NULL
- 我的代码一直返回0作为文本文件中的小数数
- 函数读取最大和min int值,并用文本字符串返回
- 问题 - 递归函数以返回文本文件排列
- C++程序不返回文件中文本和字符串数据的值
- 搜索文本文件并返回等号后的值
- 任何人都知道如何解决尝试将从MySQL数据库返回的行打印到文本文件(.txt)中的C++
- 有没有更好的方法可以从静态和非静态函数返回相同的字符串文本
- 使用关键字从文本文件返回数字
- 使用 sqlite3 和 C++ 绑定和返回文本数据
- 给定一个单词和一个文本,返回文本中单词字谜的出现次数
- PInvoke:从c++返回文本到c#时出错
- 通过引用和内联返回文本
- c++检查int或char并返回文本