在Windows窗体中是否有类似于Qt的QCanvas?

时间:2009-02-15 15:35:10

标签: winforms qt canvas

我编写了一个Windows窗体应用程序来解决Shikaku个难题。目前,拼图网格使用PaintEventHandler在应用程序主窗口的Panel上绘制。 PaintEventHandler调用的方法每次调用时都会重绘整个网格。虽然这种方法有效,但它是闪烁和低效的,我想用更平滑的东西替换它。

我在Qt中编写了许多类似的应用程序。使用Qt,我将创建一个QCanvas和一个QCanvasView。然后我可以在QCanvas中添加对象或从QCanvas中删除对象,并在QCanvasView上调用update()方法,看看更改是否生效而没有闪烁。

我尝试过的一种替代方法是保留对用于绘制Panel的Graphics对象的引用,并尝试在Paint事件之外绘制它。这不起作用:我得到了一个相当无益的ArgumentException: Parameter is not valid异常,我只能假设它被Windows抛出,因为它不期望应用程序在那时做任何绘画。

是否有类似于Windows窗体的QCanvas?如果没有,我应该使用什么方法来更新拼图网格?

2 个答案:

答案 0 :(得分:1)

WindowsForms控件的Paint事件通常将上下文区域设置为仅重绘控件的必要部分。这与将DoubleBuffered设置为true相结合,通常足以解决大多数重新绘制的问题。

此外,您正在获取异常,因为您正在缓存的Graphics对象在绘制事件完成时为Disposed。

假设DoubleBuffering是不够的,一种可行的方法是,当您在Paint事件中在屏幕上绘制时,将绘图绘制到屏幕外Bitmap。或者,在PictureBox中托管位图,然后自动重绘。

答案 1 :(得分:0)

一个v.quick想法 - 尝试PyQt怎么样? QCanvas和QCanvasView应该可以在任何平台上正常工作