QPainter绘图
Qt的二维绘图功能是使用QPainter在绘图设备上绘图,绘图设备包括QWidget、QPixmap、QPainter、QImge等,作为Qt的三大基类之一的QWidget是最常见的绘图设备,QWideget类及其派生的子类,都有一个事件处理函数paintEvent(),在组件界面或者当前类的界面需要绘图时,就要重写这个绘图的事件处理函数,当有绘图指令时,系统会自动运行paintEvent()函数进行绘制图形。QPainter能在各种绘图设备上实现绘制图形功能的基本的类,如基于QWidget的各种Qt界面及组件的图形显示效果就是由QPainter实现。下面介绍QPainter、QPixmap的简单使用
一般绘画都会有一个画家、笔、颜色、刷子、绘画的板子纸张屏幕等,可以将QPainter创建的对象看做画家,绘画的板子、纸张、屏幕看做绘图的设备,即在哪个地方绘画,在界面上绘图,就需要重写绘图事件paintEvent()函数。
QPainter绘图主要是用QPainter的接口绘制各种图形,如点、直线、矩形、圆形、多边形、图片和文字等。绘制图形可以设置线条的风格(虚线、实线等)、线条的颜色,文字的特性,还有绘制图形的填充等,主要与QPen类、QBrush类、QFont类等有关。有关于这几个类这里不再介绍。
设置渲染:setRenderHint(),参数是枚举类型,如QPainter::SmoothPixmapTransform,可查看帮助文档
绘制文本:drawText()
注意:
如果指定绘图设备,也就是图片画在什么的板子,那个板子如果是当前窗体, 就是让当前窗体显示你所绘制的图片,那么一定要在paintEvent()函数中实现
如: painter(this)的就是指定绘制在窗体上,不是某个部件,如果指定QPainter对象的构造函数是this,只有在paintEvent()重写的函数中才能将图形绘制到窗体,绘制以后同时要调用update()进行窗体更新
如下代码:
void Father::paintEvent(QPaintEvent *event){
QPainter painter(this);
QPixmap pix(size());
pix.load("美女.png);
QRect rect(0,0,100 ,100);
painter.drawPixmap(rect,pix);
update();
}
例如:在别的函数中QPainter的对象的构造函数参数是this,那么图形不能绘制到窗体
以下的函数不能实现图形绘制到窗体并且显示
void Father::getRoundImages(){
QPainter painter(this);
QPixmap pix(size());
pix.load("美女.png);
QRect rect(0,0,100 ,100);
painter.drawPixmap(rect,pix);
}
(一)重写paintEvent()函数绘制基本图形
(1)在当前窗体绘制图形
详情,painter其参数是this,即绘图设备是当前界面,当前窗体(界面)的大小设置为(300,200),给画家设置画笔的颜色为红色setPen(QColor(Qt::red)),笔的宽度为20,pen.setWidth(20);,也可以定义一个笔,设置好笔的属性然后传给painter。绘制图形即调用对应的绘制图形的函数,如绘制直线drawLine()。
void painterTest::paintEvent(QPaintEvent *event)
{
//创建Qpainter对象
QPainter painter(this);
//painter.setPen(QColor(Qt::red));
QPen pen;
pen.setWidth(20);
pen.setColor(QColor(Qt::red));
painter.setPen(pen);
//