【问题标题】:Are there any useful tools for diagnosing Qt layout and spacing problems?是否有任何有用的工具可用于诊断 Qt 布局和间距问题?
【发布时间】:2011-07-22 03:41:52
【问题描述】:

另见相关问题: How do you debug Qt layout problems

我正在尝试布置一些复杂的小部件层次结构,但我遇到了一些常见问题,即事物之间的距离比我预期的更近或更远。我发现一种非常有用的技术是创建一个样式表,其中包含层次结构中不同点的小部件的不同背景和边框颜色列表。我还添加了QFileSystemWatcher 以在每次保存样式表时重新加载样式表,这样可以快速更改而无需重新构建。

但是,我一直认为必须有更好的方法。查看诸如 Firefox 的 Web 开发人员工具栏之类的工具,这些工具将执行诸如标记边框或显示控件层次结构之类的操作。是否有任何工具或库可以为 Qt 应用程序执行此操作?

2016 年 5 月 5 日更新

我发现诊断间距问题的最简单和最有用的方法之一是根据 QLayouts 转储小部件层次结构。我创建了一些示例代码,其中嵌入了有关大小提示、间隔项、填充和内容边距的信息:https://gist.github.com/pjwhams/6ebc040db3ab55615eafd831e184e39c

另一个工具:https://github.com/robertknight/Qt-Inspector

【问题讨论】:

  • 我的大脑告诉我,我曾经读过一篇由 Trolltech/Nokia 的开发人员撰写的文章,他们提到了他们使用的实用程序或帮助程序类。我一辈子都找不到那篇文章。也许其他人知道。
  • 您是指 Qt Designer 中的布局管理(根据引用的问题)还是动态构建小部件和布局?
  • 好吧,几周前我正在寻找类似的东西并放弃了。我通常会覆盖感兴趣的小部件的paintEvent 并用纯色填充它们。我也在使用样式表,但这一次让我很生气。
  • @Derrick - 我正在动态构建布局。我正在考虑一个外部工具,它可以连接到流程并在运行时注释小部件层次结构,或者您可以构建的类/库覆盖每个项目的绘图以显示诊断信息,例如您在 CSS工具。
  • @the_mandrill:你能和我们分享你的 QFileSystemWatcher 吗?

标签: qt layout


【解决方案1】:

我在另一个线程中有一个相关的后续问题,Dmitry 提出了一个很好的方法,导致了一个很好的解决方案:Drawing an overlay on top of an application's window

编辑:我还在QLayout::itemAt() 的文档中发现了一种有用的技术,它展示了如何在布局中遍历QLayoutItems 并绘制它们的矩形

【讨论】:

    【解决方案2】:

    您能否在每次将鼠标悬停在元素上时使用QHoverEvent 添加深色边框或带有 id 的弹出窗口?

    【讨论】:

    • 有趣的想法。大概尽管您需要在每个班级中处理这个问题?或者您可以通过应用程序监控事件吗?
    • 是的,除非您可以使用面向方面的编程扩展来自动装饰它们。 (我只在 java 而不是 c++ 中做到这一点)。
    • 您可以使用规则 QWidget:hover{ background-color: #f00; 为根 QWidget 设置样式表。 }
    【解决方案3】:

    您正在寻找的基本上是一个分析 QObject 或更确切地说是 QWidget 层次结构并添加注释的工具。这正是GammaRay is about。它是 GPL 许可的,因此可以免费使用。您可以通过GammaRay project page 获取更多信息。我已经用过好几次了,效果和预期一样。

    【讨论】:

    • GammaRay 可能很有用,但我发现如果您有自定义 Qt 构建,则很难构建和运行它,尤其是在 Windows 上。
    【解决方案4】:

    迟到了,但QObject::dumpObjectTree() 帮助我解决了我的问题。

    将子树转储到调试输出。

    【讨论】:

    • 请注意,这需要您使用 Qt 库 的调试版本,而不仅仅是您的应用程序,这可能会或可能不会令人讨厌。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2015-12-26
    • 1970-01-01
    相关资源
    最近更新 更多