gtk DrawingArea展开内部固定

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

但是,现在我想在DrawingArea的顶部覆盖隐藏的小部件 - 以便为显示的图像的某些部分创建工具提示事件。所以我试图把DrawingArea放在一个Fixed中 - 但现在它不能扩展到填满窗口。我可以给DrawingArea一个明确的大小请求 - 但是我真的很喜欢它扩展来填充它的父窗口已经给出的空间分配。我已经尝试将大小请求设置为-1,但这没有任何帮助。

有什么建议吗?

回答:

心中有了几分是有效的解决方案:

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

这似乎做我想做的,但我现在发现,两个“size_allocate”信号被发送到固定的 - 当一个窗口大小,另一个大概在绘图区请求新的大小分配。为了避免在第二个信号中做很多额外的不必要的工作,如果以前的高度/宽度匹配新的分配,我就返回。但是,如果可能的话,我宁愿放弃第二个信号。

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

任何人都知道一个更清洁的方式来处理这个问题?

回答:

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

以上是 gtk DrawingArea展开内部固定 的全部内容, 来源链接: utcz.com/qa/260131.html

回到顶部