【问题标题】:GTK default File->Quit behaviorGTK 默认文件->退出行为
【发布时间】:2012-07-10 19:10:22
【问题描述】:

我已经为我的窗口的 F​​ile->Quit 按钮编写了一个事件事件处理程序:

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

以这种方式实例化它:

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

我想在 on_file_quit() 结束时关闭窗口,就像按下窗口顶部的关闭按钮一样。我还没有在任何地方找到解决方案。提前感谢您的帮助!

【问题讨论】:

  • 根据this,按下窗口顶部的X按钮发送destroy信号。发送该信号或直接调用它的处理程序。
  • 我读过这篇文章...我是 GTK 的新手。我不知道如何引起这个信号。
  • 好的,在四处寻找一种向小部件发送销毁信号的方法后,我想不到。我的解决方案是调用窗口的析构函数......这似乎很干净。当 stackoverflow 也允许我时,我会发布更改。

标签: c gtk gtkmm


【解决方案1】:

您可以使用 Gtk::Widget::hide() 关闭窗口。如果您想做与单击 X 按钮(发送 delete_event 信号)时相同的操作,只需直接调用 on_delete_event() 处理程序即可。

顺便说一句,您不是在“实例化”信号处理程序。您正在连接信号处理程序。另外,这是 gtkmm,而不是 GTK+。

【讨论】:

    【解决方案2】:

    感谢您的回复。调用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-&gt;hide()

    【讨论】:

      猜你喜欢
      • 2021-02-01
      • 2021-04-06
      • 2021-10-25
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 1970-01-01
      相关资源
      最近更新 更多