我一直在创建一个下拉式GTK日历小部件在我的一个应用程序的麻烦。GTK下拉日历小部件?
目标:
基本上我想有一个文本组合框,您可以在日期,如2011年2月1日例如键入,它会自动套用格式的日期。这部分不是问题,另一部分是下拉日历方面,您可以单击组合框旁边的下拉按钮,然后下拉到可以选择日期的日历中。
问题/半的解决方案:
我花了一些工作,在这个用Ruby GTK(真的侏儒绑定)黑客和下面是一些我已经想出了解决方案的。
基本上我创建了一个文本框,然后创建一个按钮,并给了它“向下箭头”来模拟组合框下拉按钮,它看起来还好,不是最伟大的事情在世界上。
对于实际的日历小部件,我会创建一个无边界/无标题的对话框,并在其中嵌入日历小部件,并将其置于文本框的下拉组合框列表出现的位置。
当用户选择一个日期时它将被解雇。
但是有几个问题与上述解决方案,我已经与想出是:
无国界/ titleless对话框仍然创建了被在任务栏上显示的东西。 ..
如果用户按下“ctrl + q”来退出应用程序,由于日历小部件具有焦点,所以键绑定永远不会将其发送到父窗口。
如果我移动父窗口,日历小部件卡在那里漂浮在空中。
如果我点击其他地方或键入日期到文本框,日历Widget没有消失,我要挑从日历窗口小部件的日期......
因此,在短期我会像一些建议或建议如何做一个适当的/更好的方式做一个日历下拉部件?我宁愿保持这纯粹在GTK没有像Gnome等额外的小部件...
如果对话框没有父窗口,可能会出现问题1。不确定关于ruby,但在C++中,对话框的构造函数接受父窗口作为参数。当我传递此参数时,对话框不会显示在任务栏中。 – 2011-02-01 18:24:29
我还不得不做一个日历小部件,并有2-4所有问题。我终于通过添加Accept和Cancel按钮来解决2和4问题。至少它明确地向用户显示了关闭日历的方式。没有真正有时间去处理问题3.我想可以从父窗口捕捉一些运动事件并相应地移动日历(使用“motion-notify-event”或许有人纠正我)。恐怕这就是我可以提供的所有建议。 – 2011-02-01 18:41:43