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
);
}
可看到几个点和曲线的位置关系。
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
);
}
可看到几个点和曲线的位置关系。
相关文章推荐
- 使用python绘制二维图形
- Qt学习笔记(四)二维图形
- 如何使用MATLAB绘制不同类型的二维图形
- 二维图形的使用(1)
- 二维图形的使用(2)
- 关于C使用指针获取二维字符数组信息
- 使用R语言绘制其他图形之相关系数图
- 如何使用ChemDraw调整化学图形
- 在windows下使用Xming+Putty显示Linux下软件图形界面
- 关于自定义View时,画图形和图片时抗锯齿的使用的问题
- 使用CxImage进行图形和格式转换(CBitmap to jpg or png or gif or bmp)
- SVG基础——如何使用可缩放矢量图形(SVG)
- 使用CreateJS绘制图形
- Android自定义图形-Shape的使用
- 图形图像处理-之-高质量的快速的图像缩放 补充 使用SSE2优化
- HTML5中使用canvas绘制复杂图形
- for循环的使用—打印输出各种图形
- FusionCharts Free使用文档教程第三章-FusionCharts Free我的第一个图形
- GUI图形用户接口的基本使用
- Quartz2D使用(图形上下文栈)