项目场景:
在QGrapicsView中绘制表格状背景
实现
重写drawBackground方法,内容如下:
//每50距离绘制一段直线
QRect r = this->rect();
QPointF tl = mapToScene(r.topLeft());
QPointF br = mapToScene(r.bottomRight());
double left = std::floor(tl.x() / 50);
double top = std::floor(tl.y() / 50);
double right = std::ceil(br.x() / 50);
double bottom = std::ceil(br.y() / 50);
//vertical lines from left to right
for (int vi = (int)left; vi <= (int)right; vi++)
{
QLineF line(vi * 50, top * 50, vi * 50, bottom * 50);
painter->drawLine(line);
}
//horizontal lines from top to bottom
for (int hi = (int)top; hi <= (int)bottom; hi++)
{
QLineF line(left * 50, hi * 50, right * 50, hi * 50);
painter->drawLine(line);
}
错误提示:
如下代码打印方法参数
void GraphicsView::drawBackground(QPainter* painter, const QRectF& rect)
{
qDebug() << rect << this->rect();
}
drawBackground提供的rect长宽不正确,绘制的时候会发现不正常,使用this->rect()即可