Calendar GTK下拉日历小部件?

Calendar GTK下拉日历小部件?,calendar,gtk,Calendar,Gtk,我在我的一个应用程序中创建一个下拉GTK日历小部件时遇到了麻烦 目标: 基本上,我希望有一个文本组合框,您可以在其中键入日期,例如2011/02/01,它将自动格式化日期。这一部分不是问题,另一部分是下拉日历方面,您可以单击组合框旁边的下拉按钮,它会下拉到一个日历中,您可以在其中选择日期 问题/半解决方案: 我花了一些时间研究Ruby GTK Gnome绑定,下面是我提出的一些解决方案 基本上我创建了一个文本框,然后创建了一个按钮,并给它下箭头来模拟一个组合框的下拉按钮,它看起来不错,不是世界上

我在我的一个应用程序中创建一个下拉GTK日历小部件时遇到了麻烦

目标:

基本上,我希望有一个文本组合框,您可以在其中键入日期,例如2011/02/01,它将自动格式化日期。这一部分不是问题,另一部分是下拉日历方面,您可以单击组合框旁边的下拉按钮,它会下拉到一个日历中,您可以在其中选择日期

问题/半解决方案:

我花了一些时间研究Ruby GTK Gnome绑定,下面是我提出的一些解决方案

基本上我创建了一个文本框,然后创建了一个按钮,并给它下箭头来模拟一个组合框的下拉按钮,它看起来不错,不是世界上最棒的东西

对于实际的日历小部件,我将创建一个无边框/无标题的对话框,并将日历小部件嵌入其中,并将其放置在文本框的正下方,下拉组合框列表将出现

当用户选择日期时,它将被取消

但是,我提出的上述解决方案存在以下几个问题:

“无边框/无标题”对话框仍然会创建一些显示在任务栏上的内容

如果用户按say ctrl+q退出应用程序,因为日历小部件具有焦点,所以键绑定永远不会到达父窗口

如果我移动父窗口,日历小部件就会卡在那里,漂浮在空中

如果我单击其他地方或在文本框中键入日期,日历小部件不会消失,我必须从日历小部件中选择一个日期


因此,简而言之,我想要一些关于如何正确/更好地使用日历下拉小部件的建议或建议?我更愿意将其完全保留在GTK中,而不使用Gnome等其他小部件。

组合框将GtkListStore作为其下拉菜单。您可以实现一个自定义的GtkCellRenderer,在其单元格中将日期呈现为GtkCalendar,然后在列表存储中只保留一项日期。当您下拉组合框时,将显示日历,用户可以选择日期,然后您可以从列表存储中读取日期。

如果对话框没有父窗口,则可能会出现问题1。不确定Ruby,但在C++中,对话框的构造函数接受父窗口作为参数。当我传递此参数时,该对话框不会显示在任务栏中。我还必须制作一次日历小部件,并且出现了2-4个问题。最后,我通过添加“接受”和“取消”按钮来处理2和4。至少它明确地向用户展示了一种关闭日历的方法。没有时间对问题3做点什么。我想可以从父窗口捕获一些运动事件,并使用运动通知事件相应地移动日历,也许有人会纠正我。恐怕这就是我能提供的全部建议。听起来是个好主意!但是,对于不熟悉GTK的人来说,实现一个将日期呈现为GtkCalendar的GtkCellRenderer听起来很吓人,那么如何在单元格呈现器中呈现控件呢?因此,一些示例代码本来是不错的…老实说,这很吓人-在这里发布一些示例代码太复杂了。一段时间以来,我一直想写一篇关于如何编写自定义单元格渲染器的教程,但我没有找到时间。