1、QPainter
使用QPainter来进行绘制操作,常用的有:
QPainter::drawPoint:绘制点
QPainter::drawLine:绘制线
QPainter::drawRect:绘制矩形
QPainter::drawRoundedRect:绘制圆角矩形
QPainter::drawPolyline:绘制折线,即多个首尾相连的线
QPainter::drawPolygon:绘制折线形,即多边形
QPainter::drawEllipse:绘制圆形
QPainter::drawArc:绘制圆弧
QPainter::drawPie:绘制扇形
QPainter::drawChord:绘制弦
QPainter::drawConvexPolygon:绘制凸多边形
QPainter可以剪切一个矩形、区域、路径,分别使用setClipRect()、setClipRegion()、setClipPath()函数来实现,然后就只能在剪切的区域内进行绘制,超出剪切区域的话不会显示绘制的内容:
void Widget::Widget::paintEvent(QPaintEvent* pe) { QPainter painter(this); painter.setClipRect(10, 0, 20, 10); painter.drawText(10, 10, "test"); //注意y坐标是绘制文字的baseline }
void MainWindow::paintEvent(QPaintEvent* pe) { QPainter painter(this); QBrush brush(QColor(255, 0, 0));//画刷颜色为红色,画刷填充模式为Qt::SolidPattern painter.setBrush(brush); painter.setPen(Qt::blue); //画笔颜色为蓝色 painter.drawRect(50, 50, 100, 80); }
drawRect()的绘制位置有时会有些特殊,下面是使用画笔宽度分别为1 (默认)、2、3的情况下进行的边框绘制代码:
void MainWindow::paintEvent(QPaintEvent* pe) { QPainter painter(this); //画笔宽度为1的话(默认),实际绘制的大小会比传入的大小+1 QPen pen(Qt::red, 1); painter.setPen(pen); painter.drawRect(QRect(0, 0, width() - 1, height() - 1)); //画笔宽度为2的话,实际绘制的位置会比传入的位置-1,大小会比传入的大小+2 QPen pen(Qt::red, 2); painter.setPen(pen); painter.drawRect(QRect(1, 1, width() - 2, height() - 2)); //画笔宽度为2的话,实际绘制的位置会比传入的位置-1,大小会比传入的大小+3 QPen pen(Qt::red, 3); painter.setPen(pen); painter.drawRect(QRect(1, 1, width() - 3, height() - 3)); }
2、paintEvent()
一般在重绘事件处理函数paintEvent中进行绘制工作,如绘制线:
void Widget::paintEvent(QPaintEvent* ) { QPainter painter; painter.begin(this); painter.drawLine(QPoint(0, 0), QPoint(100, 100)); painter.end(); }