【问题标题】:GTK prevent custom widget from grabbing focusGTK 阻止自定义小部件获取焦点
【发布时间】:2016-07-16 04:15:31
【问题描述】:

我已经实现了一个音乐键盘作为 Fixed 的子类,其中每个单独的键都是 DrawingArea 的子类,到目前为止,它工作得很好:自定义绘图代码暴露,按下 + 释放功能工作...... .看,这就是问题所在:我希望用户能够在鼠标向下的情况下将鼠标拖过键盘来播放它。我目前捕获按钮按下和释放信号,以及进入和离开通知。不幸的是,这并不完全有效,因为一旦鼠标被按下,小部件似乎就抓住了鼠标的焦点。这对于普通按钮是有意义的,但对于音乐键盘则不然。除了将整个键盘重写为一个巨大的 DrawingArea 之外,还有什么好的方法可以解决这个问题?

另外,这应该没关系,但如果确实如此,我使用的是 GTK#。

【问题讨论】:

  • 尝试使用 EventBox 代替绘图区,看看是否得到不同的结果。也不要忘记将 CanFocus 设置为 true。

标签: gtk gtk#


【解决方案1】:

您可以考虑使用GooCanvas:您可以将每个键表示为 CanvasPolylines,用您需要的颜色填充它们。每个 Canvas 项目都是一个 GtkWidget,因此您可以对 enter、leave、button-pressed 等事件采取行动。

这种方法(对我而言)似乎比单独的 DrawingAreas 更有意义。由于每个绘制的元素仍然可以访问,您甚至可以动态更改颜色/大小和其他属性。此外,Polyline 可让您制作更复杂的形状。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多