前面简单的演示了Qt的几个事件,其中包括了绘图事件,而这里则比较详细的讲下绘图事件
在现实世界里,如果你需要画一幅图画,你要进行三个步骤,第一,准备画图的工具,画笔,画刷之类的,第二,选择画图的位置,你打算画在纸上,课桌上还是大街的墙上,第三,画你想画的内容,你打算画一些直线曲线来表达你的抽象思维,还是绘制彩色区域,或则直接写上一些你喜欢的文字。通过这三个步骤你就可以在你想要的地方画上一幅你想要的画,而Qt正是按照这个步骤来完成绘图的
首先是准备画图工具,Qt准备了QPainter类来作为绘图工具,这个类可以通过函数setPen(),setBrush()来设置画图工具,画笔一般用于绘制线条,而画刷通常用于区域绘制.第二步是决定绘图的位置,通常回是某个窗体(后面我们将看到也可以在其他地方绘制),无论需要在那个窗体绘制,就把这个窗体设为QPainter的父对象.第三步就是需要绘制的内容了,为此QPainter提供了大量的函数来满足需求
void drawPoint(int x int y); //绘制一个点
void drawLine(int x1 , int y1 , int x2 , int y2); //绘制一条直线
void drawRect(cosnt QRect rect); //绘制一个矩形
void drawEllipse(int x , int y , int width , int height); //绘制一个(椭)圆
void drawPie(const QRectF& rect , int starAngle, int spacAnglr); //绘制一个扇形
void drawPixmap(int x, int y , const QPixmap& pix); //绘制一幅图片
void drawText(int x , int y , const QString& str); //绘制文字
以上函数均包含了大量的重载函数以满足需求,当然QPainter提供的绘制函数不止上面这些介绍,文档中提供了全部函数的目录,有需要的可以查询文档
在明确了绘图的步骤后我们就可以开始绘制了,首先我们现在一个QWidget上绘制一条直线,方便起见,我们继承了Qwidget,然后开始在上面绘制
PaintEventDemo::PaintEventDemo(QWidget *parent)
: QWidget(parent)
{
setFixedSize(500,500);
QPainter p(this); //使用了画图工具QPainter,而我们需要画画的地方是窗体自身,所以这里将画图工具的父对象设为this
p.setPen(Qt::red); //由于是画直线,这里将画图工具的画笔设为红色,方便观察
p.drawLine(5,5,100,100);
}
运行程序的时候,出现了一个窗体,但很遗憾的是窗体上并没有出现期望的红线,而编译器则给出类似这样的信息
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1