gtkmm,如何让我的程序等待按钮点击的信号?

时间:2015-01-31 09:44:44

标签: c++ linux gtkmm

我想让我的程序等到单击按钮。

问题是,

  • 我不能使用trhead
  • 我无法使用对话框或其他窗口
  • 我不能使用像Glib::usleep()这样的函数,因为它会使接口不敏感。

我没有找到解决这个问题的任何策略。

2 个答案:

答案 0 :(得分:-1)

是否有任何反对使用基于事件的Gtkmm方式,即将听众连接到按钮的点击信号?

这看起来像这样:

helloworld.h

class HelloWorld : public Gtk::Window
{

// ...

protected:
  //Signal handlers:
  void on_button_clicked();

  //Member widgets:
  Gtk::Button m_button;
};

helloworld.cc

// ...
HelloWorld::HelloWorld()
: m_button("Hello World")   // creates a new button with label "Hello World".
{
  // ...

  // When the button receives the "clicked" signal, it will call the
  // on_button_clicked() method defined below.
  m_button.signal_clicked().connect(sigc::mem_fun(*this,
              &HelloWorld::on_button_clicked));


  // ...
}

void HelloWorld::on_button_clicked()
{
  std::cout << "Hello World" << std::endl;
}

完整示例here

基本上,在HelloWorld :: on_button_clicked中,您将执行必须等到单击按钮的操作。

答案 1 :(得分:-1)

好的,我找到了解决方案:

// computation going on
while( Gtk::Main::events_pending() )
Gtk::Main::iteration();
// computation continued

https://developer.gnome.org/gtkmm/stable/classGtk_1_1Main.html#a2a2a6cddef82f8c52026790f3f7887e0

欢迎任何评论或其他答案