QWidget类及其子类是最常用的绘图设备,从QWidget类继承的类都有paintEvent()事件,只需要重定义此事件就行。
坐标系统
QPen
1.设置线条样式setStyle(Qt::PenStyle style)
2.设置线条端点样式setCapStyle(Qt::PenCapStyle style)
3..设置线条连接样式setJoinStyle(Qt::PenJoinStyle style)
QBrush
设置画刷样式setStyle(Qt::BrushStyle style)
渐变填充需要使用专门的类。
void Widget::paintEvent(QPaintEvent *event)
{
//创建QPainter对象,指明父对象,否则不能看见
QPainter painter(this);
//先画一条线
QPen pen;
//设置线宽
pen.setWidth(2);
//设置颜色
pen.setColor(Qt::red);
//设置线的样式 实线、虚线
pen.setStyle(Qt::DashDotLine);
//设置线端点样式
pen.setCapStyle(Qt::RoundCap);
//设置画笔
painter.setPen(pen);
//画线
painter.drawLine(10,10,100,100);
//设置画刷
QBrush brush;
//画刷设置颜色
brush.setColor(Qt::yellow);
//设置填充样式
brush.setStyle(Qt::SolidPattern);
//设置画刷
painter.setBrush(brush);
//画四边形
painter.drawRect(QRect(300,300,50,50));
//画多边形,三角形
QPoint points[] = {
QPoint(200,200),
QPoint(200,260),
QPoint(260,260),
};
painter.drawPolygon(points,3);
//设置字体
QFont font;
//字体大小
font.setPointSize(30);
//粗体
font.setBold(true);
//设置字体
painter.setFont(font);
//画字
painter.drawText(400,400,QString("Qt"));
}
设置延展方式void setSpread(Spread method)
实例:辐射渐变
//设置辐射填充中心点:width()/2,height()/2,
//半径:width()/8
//焦点坐标:width()/2,height()/2
QRadialGradient radial(width()/2,height()/2,
width()/8,width()/2,height()/2);
//设置起始点颜色,0表示起始
radial.setColorAt(0,Qt::green);
//设置终点颜色 1表示终点
radial.setColorAt(1,Qt::blue);
//设置延展方式
radial.setSpread(QGradient::ReflectSpread);
//设置画刷
painter.setBrush(radial);
//画矩形
painter.drawRect(this->rect());
实例:线性渐变
QLinearGradient radial(this->rect().left(),this->rect().top(),
this->rect().right(),this->rect().top());
//设置起始点颜色,0表示起始
radial.setColorAt(0,Qt::blue);
//设置中间点颜色
radial.setColorAt(0.5,Qt::green);
//设置终点颜色 1表示终点
radial.setColorAt(1,Qt::red);
//设置延展方式
radial.setSpread(QGradient::ReflectSpread);
//设置画刷
painter.setBrush(radial);
//画矩形
painter.drawRect(this->rect());
实例:圆锥形渐变
QConicalGradient radial(width()/2,height()/2,45);
//设置起始点颜色,0表示起始
radial.setColorAt(0,Qt::yellow);
//设置中间点颜色
radial.setColorAt(0.5,Qt::blue);
//设置终点颜色 1表示终点
radial.setColorAt(1,Qt::green);
//设置画刷
painter.setBrush(radial);
//画矩形
painter.drawRect(this->rect());
麦克风音量变化
圆形进度条实现
自定义钟表