Gtkmm 3.0 Entry get_text всегда возвращает один и тот же исходный текст

У меня странная проблема с записями Gtkmm в C ++.
Я определил здесь Gtk :: Entry с именем inputEntry. У меня есть функция под названием CSF.

Где я объявляю запись в основном:

// 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, всегда показывают print начальное значение и только начальное значение Gtk :: Entry. Что случилось?

Примечание: я делал это раньше в Python, примерно так же, и это работало. Я хочу попробовать сделать это на C ++. Может быть, это потому, что я что-то не реализовал?

1

Решение

Это вопрос C ++, а не GTK.

В соответствии:

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

Вы вызываете функцию csf с двойным, созданным из строки «3.55». Чтобы получить то, что вы хотите:

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;
}

Изменение текста записи на двойное должно произойти после активации. В вашем решении это было при сигнальном подключении.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]