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