【问题标题】:Qt GUI internals - widget painting?Qt GUI 内部 - 小部件绘画?
【发布时间】:2010-10-15 03:57:53
【问题描述】:

我使用 QT 已经有一段时间了,我一直想知道有关在 Windows 中绘制 GUI 的方式。
它真的是使用 QPainter 自己绘制所有按钮、编辑框、组合框、复选框、选项卡等,还是以某种方式使用本机小部件?

它可以进行自定义样式和蒙皮的事实表明它确实使用 QPainter 绘制了所有内容,但是如何维护这种代码呢? Qt 开发人员真的对窗口系统的全部功能进行了逆向工程吗?是不是有点浪费?
另一个证据是,如果我在 Qt gui 上使用 Spy++,那么所有窗口都显示为类名等于“QWidget”。如果它使用的是本机小部件,这些小部件不应该是“BUTTON”、“STATIC”等吗?

在其他平台上呢?它在 Max OSX 中也是如此吗?

【问题讨论】:

    标签: windows macos qt user-interface widget


    【解决方案1】:

    QWindowsXPStyle documentation 有话要说:

    “警告:此样式仅在 Windows XP 平台上可用,因为它使用了 Windows XP 的样式引擎。”

    Qt Wikipedia page 有话要说:

    “使用原生 UI 渲染 API

    Qt 过去常常模拟其预期平台的本机外观,这偶尔会导致模拟不完善的地方出现细微差异。最新版本的 Qt 使用不同平台的本地 API 来绘制 Qt 控件,因此不会遇到此类问题。 [24] (另请参阅 wxWidgets,它使用原生 API 来实现大多数小部件功能。)"

    【讨论】:

      【解决方案2】:

      在 Windows XP 和 Vista 上(显示设置设置为 Classic 时除外),通过 QWindowsXPStyleQWindowsVistaStyle 绘制的小部件实际上使用低级主题特定绘制 (uxtheme.dll),例如一个按钮看起来像一个原生按钮。在旧版本的 Windows 上,Qt 通过QWindowsStyle 模拟小部件绘画。

      Mac OS X 上的情况类似,QMacStyle 依赖外观管理器来委派小部件的低级绘制。

      对于 X11,通常 Qt 使用自己的风格绘画,并具有模仿某些窗口系统的某些风格,例如QMotifStyle 具有与 Motif 相似的外观,但没有实际加载,并且取决于 Motif 环境。但是在 GNOME 下运行时,Qt 可以通过QGtkStyle 选择使用原生 Gtk+ 主题。

      【讨论】:

        【解决方案3】:

        Qt 确实可以自己绘制所有小部件(无论是使用平台主题 API 还是“原始”GDI/X/等都无关紧要)。如果它使用本机小部件(如 wxWindows 那样),几乎不可能连接到样式以更改最细微的细节,更不用说使用现成的小部件在顶部添加自定义功能了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多