标题:十九、Qt 2D绘图(九)双缓冲绘图简介(原创)
作者:yafei86
日期:2010-02-13 17:19
内容:
声明:本文原创于yafeilinux的百度博客,http://hi.baidu.com/yafeilinux 转载请注明出处。
上面一节我们实现了涂鸦板的功能,但是如果我们想在涂鸦板上绘制矩形,并且可以动态地绘制这个矩形,也就是说我们可以用鼠标画出随意大小的矩形,那该怎么办呢?
我们先进行下面的三步,最后引出所谓的双缓冲绘图的概念。
第一步:
我们更改上一节的那个程序的重绘函数。
void Dialog::paintEvent(QPaintEvent *)
{
QPainter painter(this);
int x,y,w,h;
x = lastPoint.x();
y = lastPoint.y();
w = endPoint.x() - x;
h = endPoint.y() - y;
painter.drawRect(x,y,w,h);
}
然后运行,效果如下。
这时我们已经可以拖出一个矩形了,但是这样直接在窗口上绘图,以前画的矩形是不能保存住的。所以我们下面加入画布,在画布上进行绘图。
第二步:
我们先在构造函数里将画布设置大点:pix = QPixmap(400,400);
然后更改函数,如下:
void Dialog::paintEvent(QPaintEvent *)
{
int x,y,w,h;
x = lastPoint.x();
y = lastPoint.y();
w = endPoint.x() - x;
h = endPoint.y() - y;
QPainter pp(&pix);
pp.drawRect(x,y,w,h);
QPainter painter(this);
painter.drawPixmap(0,0,pix);
}
[color=#000 ..
#1 [liyayao 02-14 14:29]
太好了。。。。
#2 [yashika 03-24 12:04]
有不采用事件通知和重载paintEvent的方法进行绘图的DEMO代码吗?这样的话似乎帧数还能提高不少哦.
#3 [forestarmy 04-06 15:09]
引用第2楼yashika于2010-03-24 12:04发表的:
有不采用事件通知和重载paintEvent的方法进行绘图的DEMO代码吗?这样的话似乎帧数还能提高不少哦.
我在QT3中见过这样使用的,但是QT4中没有,同问啊
#4 qt设置Mainwindow背景颜色 [断弦0205 01-15 20:50]
qt设置Mainwindow背景颜色,为什么设置的背景覆盖了我画的图像
#5 回 4楼(断弦0205) 的帖子 [jdwx 01-15 22:30]
既然都画图了,为什么还设置背景图像,背景图像直接画出来,不是更好。