关闭GTK窗口
Close a GTK Window
请耐心等待,因为我是GTK和GDK的新手。
我正在尝试循环浏览几个图像,对它们进行修改(在不同的点上画一个圆圈),并从stdin获取用户输入。
我编写了C++类来包装GTK框架,这样我就可以简化图像操作。我目前正在打开每个图像的单独窗口,请求输入,关闭该窗口,然后打开下一个。
除了让窗口以编程方式关闭之外,我可以做任何事情,让用户这样做是不可接受的(即太乏味)。下面是打开和关闭窗口的代码。
void PixelImage::show() {
gtk_widget_show_all(this->window);
gtk_main();
}
void PixelImage::close() {
gtk_window_close((GtkWindow*)this->window);
}
PixelImage::PixelImage(const char *fname) {
this->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(this->window, "destroy",
G_CALLBACK (gtk_main_quit), NULL);
this->fname = std::string(fname);
this->image = gtk_image_new_from_file(fname);
this->pix = gtk_image_get_pixbuf((GtkImage*)this->image);
this->pixels = gdk_pixbuf_get_pixels(this->pix);
this->len = gdk_pixbuf_get_byte_length(this->pix);
this->width = gdk_pixbuf_get_width(this->pix);
this->height = gdk_pixbuf_get_height(this->pix);
this->nchannels = gdk_pixbuf_get_n_channels(this->pix);
this->rowstride = gdk_pixbuf_get_rowstride(this->pix);
gtk_container_add(GTK_CONTAINER (this->window), this->image);
}
当在放映后调用close时,窗口将保留,当我关闭它时,会出现以下错误。
(img:2173):Gtk CRITICAL**:Gtk_widget_get_realized:断言"Gtk_IS_widget(小部件)"失败
所以我要回答我自己的问题。也许还有更好的方法,我很想听到,但这就是我解决问题的方法
我使用POSIX线程,打开一个打开图像窗口的线程,然后在主线程上做其他事情。然后我简单地从主线程调用了gtk_main_quit()。然后我用窗户轴承螺纹连接。这是代码。
static void* gtkStarter(void * a) {
gtk_main();
return NULL;
}
void PixelImage::show() {
gtk_widget_show_all(this->window);
pthread_create(&this->pp, NULL, gtkStarter, NULL);
}
void PixelImage::close() {
gtk_main_quit();
pthread_join(this->pp, NULL);
}
它似乎运行得很好。
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何从 Gtk::窗口调用派生对象的析构函数
- Gtk::带有set_icon_name的窗口图标集在 wayland 上不起作用
- 实时移动GTK+窗口
- 基于人脸检测坐标的GTK+移动窗口
- 使用 OpenGL 窗口(如 GLFW)或周围的窗口(如 GTK 或 SDL)是否存在性能差异?
- 如何知道GTK :: ComboBoxtext是弹出窗口
- 尝试将 GTK+ 窗口呈现为图像
- Gtk::在将我的gtkmm2移植到gtkmm3应用程序时,窗口显示并退出
- 如何检测窗口(gtk、qt等)应用程序上的内存泄漏
- 显示不带父窗口的Gtk::FileChooserDialog
- 如何在等待程序启动混乱/ GTK+时制作加载/介绍动画弹出窗口
- 关闭GTK窗口
- 如何在执行回调时隐藏顶级GTK窗口
- Gtk::Window set_visible导致一个空白窗口
- 将OpenGL窗口添加到GTK生成器中
- GTK+中的重复窗口无效:经过几个步骤后失败
- 在函数调用时向主窗口添加GTK子部件
- GTK :任何在按钮触发器上对窗口进行 mximize 的方法
- 在GTK中保存/恢复窗口位置