您的位置:首页 > 编程语言 > Qt开发

Qt学习笔记(七) 二维图形(1) 使用QPainter绘图

2011-02-12 16:46 295 查看
Qt的二位图形引擎是基于
QPainter
类的。它既可以绘制几何形状,也可以绘制像素映射、图像和文字。自定义窗口部件需要重新实现
QWidget::paintEvent()


void

Widget::
paintEvent(
QPaintEvent

*
/*paintEvent*/
)

{

draw();

drawBezier();

}

void

Widget::
draw()

{

QPainter

painter(
this
);

painter.
setPen(
QPen
(
Qt
::
black,

10
,

Qt
::
DashDotLine,

Qt
::
RoundCap));

painter.
setBrush(
QBrush
(
Qt
::
green,

Qt
::
SolidPattern));

painter.
drawEllipse(
10
,

10
,

400
,

240
);

painter.
drawRect(
QRect
(
10
,

300
,

400
,

140
));

}

首先需要创建一个
QPainter
,将需要绘图的设备的指针传递给
QPainter


QPainter
有各种
draw…()
可以绘制不同的图形。画笔、画刷、字体是最重要的三种设置。

画笔用来画线和边缘,
QPainter
::setPen()
可以对画笔进行设置,包括颜色、宽度、线型、拐点风格等。

画刷用来填充几何形状的图案,
QPainter
::setBrush()
可以对画刷进行设置,包括颜色和纹理风格。

绘制文本时需要对字体进行设置,
QPainter
::setFont()
对字体进行设置,包括字体族和磅值。

void

Widget::
drawBezier()

{

QPainter

painter(
this
);

painter.
setRenderHint(
QPainter
::
Antialiasing,

true
);

QPainterPath

path;

path.
moveTo(
10
,

320
);

path.
cubicTo(
200
,

80
,

400
,

80
,

480
,

320
);

painter.
setPen(
QPen
(
Qt
::
black,

8
));

painter.
setBrush(
QBrush
(
Qt
::
green,

Qt
::
DiagCrossPattern));

painter.
drawPath(
path);

}

QPainterPath
可以通过连接基本的图形单元元素来确定任意的矢量形状,包括:直线、椭圆、多边形、弧形、贝赛尔曲线等。

首先使用
QPainter
::moveto()
来确定图形的起点,然后通过
cubicTo()
来确定绘制的线路。前
4
个参数确定了两个控制点,后两个参数是结束点的位置。

修改函数如下:

void

Widget::
drawBezier()

{

QPainter

painter(
this
);

painter.
setRenderHint(
QPainter
::
Antialiasing,

true
);

QPainterPath

path;

path.
moveTo(
10
,

320
);

path.
cubicTo(
200
,

80
,

400
,

80
,

480
,

320
);

painter.
setPen(
QPen
(
Qt
::
black,

2
));

painter.
drawPath(
path);

painter.
setPen(
QPen
(
Qt
::
red,

4
));

painter.
drawPoint(
10
,

320
);

painter.
drawPoint(
200
,

80
);

painter.
drawPoint(
400
,

80
);

painter.
drawPoint(
480
,

320
);

}



可看到几个点和曲线的位置关系。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: