gtkmm,如何让我的程序等待来自按钮的点击信号?
gtkmm, how can I make my program waiting the clicked signal from a button?
我想让我的程序等到按钮被点击。
问题是,
- 我不会用 trhead
- 我无法使用对话框或其他 window
- 我不能使用像
Glib::usleep()
这样的函数,因为它会使接口不敏感。
我没有找到解决该问题的任何策略。
有什么反对使用 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 中,您将执行必须等到按钮被单击的操作。
好的,我找到了解决方案:
// computation going on
while( Gtk::Main::events_pending() )
Gtk::Main::iteration();
// computation continued
https://developer.gnome.org/gtkmm/stable/classGtk_1_1Main.html#a2a2a6cddef82f8c52026790f3f7887e0
欢迎任何评论或其他回答
我想让我的程序等到按钮被点击。
问题是,
- 我不会用 trhead
- 我无法使用对话框或其他 window
- 我不能使用像
Glib::usleep()
这样的函数,因为它会使接口不敏感。
我没有找到解决该问题的任何策略。
有什么反对使用 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 中,您将执行必须等到按钮被单击的操作。
好的,我找到了解决方案:
// computation going on
while( Gtk::Main::events_pending() )
Gtk::Main::iteration();
// computation continued
https://developer.gnome.org/gtkmm/stable/classGtk_1_1Main.html#a2a2a6cddef82f8c52026790f3f7887e0
欢迎任何评论或其他回答