QPainter 一般在部件的绘图事件 paintEvent() 中进行绘制,首先创建 QPainter 对象,然后进行图形的绘制,最后记得销毁 QPainter 对象。当窗口程序需要升级或者重新绘制时,调用此成员函数。使用 repaint()和 update() 后,调用函数 paintEvent()。
paintevent事件在主窗口中绘制,为了能够在制定控件中绘制图形,使用事件过滤器,能够到指定的空间中绘制图形
bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->warnAreaLabel && event->type() == QEvent::Paint)
{
Draw();
}
return QMainWindow::eventFilter(watched,event);
}
下边是一段示例:
void MainWindow::Draw()
{
QPainter painter(ui->frame_window); //括号内设置画图位置
QPen pen;
painter.setRenderHint(QPainter::Antialiasing, true);
pen.setColor(Qt::gray);
pen.setWidth(1);
painter.setPen(pen);
painter.drawLine(x_1,y_1,x_2,y_2); //直线
pen2.setColor(Qt::gray);
QFont font("Arial",12,QFont::Normal);//设置字体的类型,大小,加粗,斜体
painter.setPen(pen2);
painter.setFont(font);
text_scale = QString("%1").arg(scale/Arc_Num*i);
text_scale.append("m ");
painter.drawText(QPoint(x_1,y_1),text_scale);
}
直线
(x1,y1)与(x2,y2)分别为直线的起始点的坐标,直接带入下边的程序就是可以进行绘图。
painter.drawLine(x1,y1,x2,y2);
圆弧
绘制一个圆的圆弧,不绘制整个圆的时候我们就需要用到drawArc()函数,首先需要我们定义一个矩形,矩形的大小为半个圆的大小,然后在drawArch函数中输入矩形,起始角度16与跨越角度16,这个是函数中设定的参数,再次强调,角度需要乘16。
QRectF rect(x,y,w,h);
painter.drawArc(rect, startAngle * 16, spanAngle * 16); //绘制圆弧
显示文字内容
直接设置文字的格式,设定需要放置的位置,使用drawText函数进行放置就是可以的。
QPen pen5;
QString textScale;
QFont font1("Arial",12,QFont::Normal); //设置字体的类型,大小,加粗,斜体
textScale.append("Hello World!"); //设置显示文字的内容
pen5.setColor(Qt::darkGreen); //设置字体的颜色
painter.setPen(pen5);
painter.setFont(font1);
painter.drawText(QPoint(x,y),textScale); //设置显示文字的位置
画点
直接使用drawPoint函数画点。
penPointshow.setColor(Qt::red);
penPointshow.setWidth(10);
penPointshow.setCapStyle(Qt::MPenCapStyle);
penPointshow.setStyle(Qt::DashDotDotLine);
painter.setPen(penPointshow);
painter.drawPoint(x,y);