0

I've written an event event handler for my window's File->Quit button:

void on_file_quit() {
  int err = pthread_cancel( work ); 
  if (err) {
     std::cerr << "no thread to cancel\n";
  }
  else { 
    pthread_join( work, NULL );
  }
}

instantiating it this way:

pfile_quit->signal_activate().connect( sigc::ptr_fun(on_file_quit) );

I would like to make then close the window at the end of on_file_quit(), as in pressing the close button at the top of the window. I haven't found the solution anywhere. Thanks in advance for any help!

4

2 に答える 2

0

お返事をありがとうございます。Gtk::Widget::hide()アプリケーションを終了できるようにウィンドウを閉じますか? 私の解決策は、次のようにウィンドウのデストラクタを呼び出すことでした。

void on_file_quit() {
  int err = pthread_cancel( work ); 
  if (err) {
     std::cerr << "no thread to cancel\n";
  }
  else { 
    pthread_join( work, NULL );
  }
  delete pwindow;
  pwindow = NULL; 
}

次に、このハンドラーを x ボタンに接続しました。

 g_signal_connect (pwindow->gobj(), "delete_event", G_CALLBACK (on_file_quit), NULL);

gtkmm でこれを行う方法がわかりませんでした。私はこの解決策に満足していますが、それが最も安全で標準的なものかどうかはわかりません。

これもうまくいきました: pwindow->hide().

于 2012-07-12T19:20:45.297 に答える
0

ウィンドウは Gtk::Widget::hide() で閉じることができます。X ボタンがクリックされたとき (delete_event シグナルが送信される) と同じことをしたい場合は、 on_delete_event() ハンドラーを直接呼び出します。

ところで、シグナル ハンドラを「インスタンス化」しているのではありません。シグナルハンドラを接続しています。また、これは GTK+ ではなく gtkmm です。

于 2012-07-11T10:34:01.063 に答える