Gtkmm:稍后添加窗口
Gtkmm: Adding Window at later time
因为我正在编写一个"通用"应用程序,在面对其他配置时行为完全不同,所以我被迫显示 gtk 窗口,即使我在启动时还不知道它们。可能还需要同时需要多个窗口(不是模式对话框,而是独立窗口)。但是,如果可以在启动时简单地启动一个 gtk 事件循环,那就太好了。
是否可以在启动后以某种方式将窗口添加到该循环中?虽然我找到了似乎完全支持缩进行为的Gtk::Application
类,但我只能使用 Gtk::Main
类。
只允许一个 Gtk::Main 对象。小部件应该在运行主事件循环的同一线程中创建。要解决此限制,您需要开发一种方法将窗口创建命令传递给 gtk 线程。
最简单的方法是使用 Glib::D ispatcher
struct WindowBuilder {
/**/
Glib::Dispatcher* signal_create;
void create_window() {
//From main thread...
signal_create->emit();
}
}
void create_mainWnd() {
new Ui::MainWnd();
}
//From Gtk thread...
builder->signal_create->connect(sigc::ptr_fun(create_mainWnd));
Gtk::Main::run();
Glib::D ispatcher 不接受任何参数,所以下一步是弄清楚如何在线程之间传递参数。
对于不同类型的窗口,您可以只使用不同的分配器。
boost::asio::io_service 可以帮助您传递消息。
while(!exit) {
io_service.reset();
io_service.poll();
while(Gtk::Main::events_pending())
Gtk::Main::iteration();
Sleep(0);
}
相关文章:
- MFC 中的窗口消息管理:添加基类调用是否是强制性的?
- Wxwidgets - 如何添加调整大小事件处理程序以使"X"绘图随窗口调整大小?
- 在窗口中的张量流中添加操作
- 如何添加事件以退出窗口
- 如何在 QT3 中将复选框添加到 QFileDialog 窗口
- 添加精灵时窗口关闭
- 将 QQuickView 元素添加到现有窗口
- 无法从我的滑动窗口中添加值
- 无法在窗口中添加缩略图按钮
- 在Visual Studio发射窗口中添加了其他C 支架
- 在运行时向窗口添加控件
- 如何将事件处理程序添加到桌面窗口
- 使用WXWIDGET C 将菜单和子菜单选项添加到Mac中的窗口菜单
- 在分层窗口中添加一个子窗口
- 无法在 gtkmm 中向窗口添加多个按钮?
- Gtkmm:稍后添加窗口
- 如何将菜单栏添加到我的 WTL 对话窗口
- 如何将按钮添加到任务栏后使窗口看起来对称
- 当我在窗口上动态添加小部件时,我应该指定父级
- 如何在win32程序中在单个窗口中添加多个工具栏