我正在使用GTK + 3和图形库cairo在Linux(Ubuntu 16.04 - WM:Gnome)中开发GUI。
点击按钮(Plot)后,使用cairo的指示,我在新的顶部窗口上画了一个红色正方形,我放了一个GtkDrawingArea
。
在这个窗口中我还点了一个按钮(取消),隐藏了窗口。通过这种方式,如果我重新推动" Plot",红色方块重新出现。
问题是" x"图标出现在窗口的顶部栏中。 如果(不是我)用户按下这个x,则窗口消失,如果他重新按下" Plot"报告错误。
问题是:有可能避免这种可能的错误原因吗? (从窗口顶部栏中删除此" x"或以某种方式禁用其功能)。
我试图找到一个解决方案,找到的可能性是:
1 - 从窗口中移除"装饰"的属性。 顶部栏消失(也是x),但不可能在屏幕上移动窗口
2 - 使用函数gtk_window_set_deletable(window, FALSE)
(之前用于显示窗口),但x始终存在并推动窗口被破坏。
如果您认为这有用,我可以报告代码。 我在等你的建议。
答案 0 :(得分:1)
修改强>
现在我们知道你想要实现的目标:显示一个单独的窗口,但避免销毁它,以便你可以再次显示它。你已经在"取消"辅助窗口的按钮是隐藏它的逻辑。
最干净的解决方案是执行相同的操作:当用户尝试关闭辅助窗口时,请隐藏它。这样,用户不会因为看到显然没有按预期工作的东西而感到沮丧。隐藏或关闭,对您来说有所不同,但对用户来说却是一样的。
所以你只需要连接到那个辅助窗口的delete-event
,然后隐藏它。甚至无需为此创建特定的回调,GTK +为您提供:您只需将delete-event
连接到gtk_widget_hide_on_delete
即可。要再次显示该窗口,只需在其上调用gtk_widget_show_all
。
原始回答:
我意识到情节
"实现"是一个在GTK +中具有明确含义的术语。如果您不是在谈论小部件实现,请不要在上下文中使用它,并尝试使用替代术语。
我想要的是删除这个" x"从窗户的顶部栏 或以某种方式禁用其功能。
您是否明白这对用户来说非常烦人并且会破坏统一的用户体验?您想使用随机不同的应用程序吗?
无论如何,禁用关闭按钮的一种方法是连接到delete-event
并在那里返回TRUE
以停止事件的传播。按钮仍然会在那里,但什么都不做,所以你必须杀死应用程序退出它。
要使按钮消失,gtk_window_set_deletable
会要求窗口管理器执行此操作,但我们需要一些代码才能知道您的尝试出现了什么问题。
答案 1 :(得分:0)
谢谢liberforce。
使用返回TRUE的delete_event,x按钮被禁用。
当应用程序或多或少被终止时,我将添加一个对话框,通知用户使用“取消”按钮代替关闭带有X的窗口。
再次感谢您