Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在

开发基于GTK+或QT的应用程序
回复
lover2668
帖子: 6
注册时间: 2018-09-19 16:39
送出感谢: 1 次
接收感谢: 0

Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在

#1

帖子 lover2668 » 2018-09-19 17:07

我在linux  redhat7.5下发使用GTK+开发窗口显示界面。

主要是文件上传下载操作。

首先,进程中创建一个UI线程主要接收命令文件上传下载命令消息。

再创建一个GTK界面绘制线程,此GTK线程创建一个主windows窗口并设置为hide不显示此窗口,且调用gdk_threads_init和gdk_threads_enter以及gdk_threads_leave接口进行线程安全保护,在此GTK线程中调用gtk_main循环。此GTK线程会loop循环在GTK中。

UI线程通过事件通知GTK线程创建文件选择框或者进度条子窗口。

下载时候使用GTk+创建一个多文件选择框窗口,选择完毕文件后调用gtk_widget_destroy销毁窗口且函数传入参数为子窗口的GtkWidget指针。 

上传文件时候使用GTK+创建一个文件选择窗口,选择文件目录作为保存文件路径,选择完毕后调用gtk_widget_destroy销毁窗口且函数传入参数为子窗口的GtkWidget指针。

上传或者下载文件超过1MB大小时,会创建一个进度条子窗口,窗口中创建一个box容器,添加label控件显示文件名,添加progressbar空间显示文件传输进度,添加两个button按钮分别作为暂停和取消按钮。动态更新此子窗口titel来显示传输百分比的数值,更新progressbar显示百分比条,更新label显示时间。传输完毕或者取消时,会调用tk_widget_destroy销毁窗口且函数传入参数为子窗口的GtkWidget指针。

但是进度条窗口会概率性出现下面这样的提示框,提示进度条窗口已经创建了。

出现时会导致进度条窗口按钮点击没有任何相应,进度条窗口也不能刷新。

这问题求帮助指教  qq  1733177

问题的图片,请见下面链接
https://www.oschina.net/question/2039_2287119
头像
astolia
论坛版主
帖子: 4031
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 665 次

Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在

#2

帖子 astolia » 2018-09-19 20:18

没有具体的代码说个毛
lover2668
帖子: 6
注册时间: 2018-09-19 16:39
送出感谢: 1 次
接收感谢: 0

Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在

#3

帖子 lover2668 » 2018-09-20 8:45

艾思
上次由 lover2668 在 2018-11-15 10:29,总共编辑 1 次。
头像
astolia
论坛版主
帖子: 4031
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 665 次

Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在

#4

帖子 astolia » 2018-09-20 10:15

首先xxx is ready的意思是xxx已经可用了,而不是xxx已经存在
这是gnome-shell的windowAttentionHandler给你的提示 https://github.com/GNOME/gnome-shell/bl ... ler.js#L20
按照它的代码,你创建窗口后设置焦点,或不显示在taskbar里它就不会提示了

代码: 全选

gtk_window_present(GTK_WINDOW(pChildWin));

代码: 全选

gtk_window_set_skip_taskbar_hint(GTK_WINDOW(pChildWin), TRUE);
另外这是提示是gnome-shell发出的,所以你的窗口无法响应应该另有原因
这些用户感谢了作者 astolia 于这个帖子:
lover2668 (2018-09-20 16:25)
评价: 3.7%
lover2668
帖子: 6
注册时间: 2018-09-19 16:39
送出感谢: 1 次
接收感谢: 0

Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在

#5

帖子 lover2668 » 2018-09-20 16:26

astolia 写了:
2018-09-20 10:15
首先xxx is ready的意思是xxx已经可用了,而不是xxx已经存在
这是gnome-shell的windowAttentionHandler给你的提示 https://github.com/GNOME/gnome-shell/bl ... ler.js#L20
按照它的代码,你创建窗口后设置焦点,或不显示在taskbar里它就不会提示了

代码: 全选

gtk_window_present(GTK_WINDOW(pChildWin));

代码: 全选

gtk_window_set_skip_taskbar_hint(GTK_WINDOW(pChildWin), TRUE);
另外这是提示是gnome-shell发出的,所以你的窗口无法响应应该另有原因
感谢帮助和答复,谢谢
lover2668
帖子: 6
注册时间: 2018-09-19 16:39
送出感谢: 1 次
接收感谢: 0

Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在

#6

帖子 lover2668 » 2018-09-21 8:48

在调用gtk_widget_show前调用gtk_window_present 以及在先调用gtk_window_present再调用gtk_widget_show测试发现问题依然存在
头像
astolia
论坛版主
帖子: 4031
注册时间: 2008-09-18 13:11
送出感谢: 1 次
接收感谢: 665 次

Re: Linux下使用GTK+创建窗口关闭后,再创建时候提示窗口已经存在

#7

帖子 astolia » 2018-09-26 17:02

lover2668 写了:
2018-09-21 8:48
在调用gtk_widget_show前调用gtk_window_present 以及在先调用gtk_window_present再调用gtk_widget_show测试发现问题依然存在
我跟你说过了啊,那个提醒是gnome-shell发出的,本身并不影响你程序的运行。你程序失去响应是另外的原因导致的。
回复

回到 “GTK+和QT”