2016-10-07 5 views
1

C++のGtkmmエントリに奇妙な問題があります。
私はここでinputEntryと呼ばれるGtk :: Entryを定義しました。私はcsfという関数を持っています。Gtkmm 3.0エントリget_textは常に同じ初期テキストを返します

私はメインのエントリを宣言

// 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(コードの先頭にプロトタイプがある)を宣言

:私は関係なく、私がのGtk ::エントリに入力する内容、プログラムを実行していないとき、不思議な、しかし

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

を、提出すると、端末は常に3.55を示します。私はset_textを "1.11"に変更しようとしましたが、投稿時には常に1.11を示しました。私は2番目のset_textを "1.11"にしてみてみましたが、常に1.11と表示されてしまいました。set_textを使わずに試しましたが、常に0と表示されます。それは300000または0.1で、常に初期値とGtk :: Entryの初期値だけを表示します。なにが問題ですか?

注:私は以前と同じようにPythonでこれを行いました。私はC++でやってみたいと思っています。たぶん私は何かを実装していないからでしょうか?

答えて

2

これはC++の質問ですが、gtkのものではありません。ラインで

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

変更は、活性化の後に発生する必要があります。あなたの解決策では、それは信号接続にあった。

関連する問題