时间:2010-10-12 01:42:51

标签: gtk

我目前在一个Frame中加载一个DrawingArea小部件 - 它总是展开以填充框架。然后,我可以在DrawingArea上设置configure事件,以分配与窗口大小相同的像素图,在其上绘制,然后将像素图绘制到DrawingArea(使用draw_drawable)。

但是,现在我想在DrawingArea的顶部覆盖不可见的小部件 - 以便为显示的图像部分创建工具提示事件。所以我试图将DrawingArea置于一个固定的位置 - 但现在它不会扩展以填充窗口。我可以给DrawingArea一个明确的大小请求 - 但我真的希望它扩展以填充它的父窗口已经给出的任何空间分配。我已经尝试将大小请求设置为-1,但这没有任何帮助。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

提出了一种有效的解决方案:

  • 创建固定。
  • 创建DrawingArea并将其添加到Fixed。
  • 连接固定为'size_allocate'信号,并在信号处理程序中,获取固定分配(宽度和高度),然后获取DrawingArea以进行当前分配的size_request。

它似乎做我想要的,但是我现在注意到两个“size_allocate”信号被发送到固定的 - 一个在窗口调整大小时,另一个可能是在DrawingArea请求新的大小分配时。为了避免在第二个信号中做很多额外的不必要的工作,我只返回前一个高度/宽度是否匹配新的分配。但如果可能的话,我宁愿废除第二个信号。

我尝试在DrawingArea size_request之前/之后阻塞/解除阻塞size_allocate信号无效(可能是因为我已经在size_allocation处理程序中)。

任何人都知道更清洁的方式来解决这个问题吗?

答案 1 :(得分:1)

听起来你正在跳过很多箍以避免实现自定义小部件。你可能值得花时间学会这样做;覆盖大小请求/分配以获得所需大小,覆盖expose_event以绘制图像,并覆盖motion_notify_event或其他任何事件处理程序以处理鼠标位置和单击。