【问题标题】:Qt with multiple (two) GUI/Graphics layers or buffers具有多个(两个)GUI/图形层或缓冲区的 Qt
【发布时间】:2011-04-27 09:18:19
【问题描述】:

您好,

我刚刚开始探索 Qt,我想知道以下是否可行。我想创建一个具有两个 GUI/图形层的应用程序。顶层(称为 A)将位于底层(称为 B)的顶部,并且两者都将位于应用程序的顶部。如果一个按钮存在于两个层中的相同位置,则只有 A 中的按钮应该是可见的并响应点击事件。如果 A 层中的相应位置为空,则 B 层中的按钮应该只接收点击事件。我真的很希望 Qt 为我处理这个问题。最简单的方法是什么?

我可能从错误的角度解决问题。这个问题的驱动力是我想要 B 层中存在的内容的屏幕截图(无论它是否被 A 层中的小部件覆盖)。我不希望该屏幕截图中来自 A 层的项目,但它们仍应出现在屏幕上。我的想法是,通过将 GUI 分成两层并绘制成 Pixmap,我可以轻松提取底层 B 的 Qt 创建的图像。也许有一种更简单的方法可以让 Qt 将我想要的元素绘制到屏幕外缓冲区?

顺便说一句,我不是在这里寻找完整的解决方案。 Qt 文档非常好,所以我真的只是希望能指出正确的方向。谢谢!

【问题讨论】:

    标签: qt user-interface


    【解决方案1】:

    听起来像是QGraphicsView 的工作。这将完全符合您的要求。

    【讨论】:

    • 很遗憾,我无法解决这个问题,但我的同事有一个解决方案。据我了解,他使用 Render 函数将 B 层中的元素绘制到另一个缓冲区。基本上,当调用他的函数时,它会清除标记为 A 层一部分的所有元素的可见标志,调用 Render 函数,然后恢复可见标志。我们认为这会奏效。我想唯一担心的是额外的重绘事件,或者屏幕是否会以某种方式更新中间功能,其中 A 层的元素处于未知的可见性状态。
    • 只需将你所有的 UI 组件设置为 QGraphicsItem/QGraphicsWidgets 并设置 z 属性,graphicsview 框架会为你处理这些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-26
    • 2019-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多