【问题标题】:Why does wxWidgets update drawing slower than Qt?为什么 wxWidgets 更新绘图比 Qt 慢?
【发布时间】:2012-04-23 13:38:00
【问题描述】:

我正在使用 wxWidgets 绘制一个大流程图,即 625 x 26329 像素。该程序从 Qt 传输到 wxWidgets。主框架的布局很容易,主框架内部有一个自定义的滚动窗口。滚动窗口每次在更新的客户区域内绘制图表的一部分。

现在 Qt 和 wxWidgets 有很大的不同。当鼠标滚动垂直滚动时,Qt 刷新绘制图表非常流畅,而 wxWidgets 则缓慢闪烁。

谁能告诉我如何有效地制作这幅画?

【问题讨论】:

  • 除非您显示一些代码或至少详细说明您正在使用哪种小部件和/或绘画代码,否则不会。想到的一件事是,您可能在 Qt 上通过 OpenGL 启用了硬件加速绘画,但在 wxWidgets 上却没有,尽管两个框架都支持它。
  • 我是这么认为的,也许Qt对我有很大帮助,而wxWidgets必须手动添加这样的支持。 BTW 如何使用 wxWidgets 支持硬件加速?
  • 其次,我使用wxGCDC来制作抗锯齿效果。这是否需要设置一些参数来获得绘画效率?
  • 如果 Qt 实现使用 QPainter 绘制图表,它可能使用 OpenGL 后端进行绘制。你看过这个教程吗:wxwidgets.org/docs/tutorials/opengl.htm
  • 更不用说 Qt 在优化的绘制事件队列中使用双缓冲,如果 wx 不使用它会解释闪烁。

标签: qt wxwidgets


【解决方案1】:

你确定它很慢吗?我想知道,我遇到了不同的经历。

你提到闪烁。闪烁主要是由于过多的刷新调用造成的。 为了防止这种情况,您必须使用双缓冲,这是关键。

双缓冲意味着将屏幕外的所有内容绘制到图像/位图中,并且在绘制完所有内容后,图像/位图被完全绘制(这样做非常快,所以没有闪烁:)! )。

Qt 使用默认的双缓冲。这就是为什么它看起来每次都很顺利。 然而,这种方法的缺点是它会消耗性能。 wxWidgets 并不限制你。相反,它说,获得双缓冲是你的任务。

你还应该看看你是否没有剪裁你正在绘制的区域。在 Windows 下使用 wxWidgets 剪辑给了我更好的性能。

PS: 是的,老问题,但我认为仍然需要知道事实如何。

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2012-02-15
    • 2013-08-18
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    相关资源
    最近更新 更多