C++ 在QGraphicscene中尝试绘制背景网格而不进行抗锯齿时出现的瑕疵

C++ 在QGraphicscene中尝试绘制背景网格而不进行抗锯齿时出现的瑕疵,c++,qt,C++,Qt,我正在尝试在QGraphicscene子类的traffackground()函数中绘制背景网格: void Scene::drawBackground(QPainter *painter, const QRectF &rect) { const int gridSize = 50; const int realLeft = static_cast<int>(std::floor(rect.left())); const int realRight =

我正在尝试在QGraphicscene子类的traffackground()函数中绘制背景网格:

void Scene::drawBackground(QPainter *painter, const QRectF &rect)
{
    const int gridSize = 50;

    const int realLeft = static_cast<int>(std::floor(rect.left()));
    const int realRight = static_cast<int>(std::ceil(rect.right()));
    const int realTop = static_cast<int>(std::floor(rect.top()));
    const int realBottom = static_cast<int>(std::ceil(rect.bottom()));

    // Draw grid.
    const int firstLeftGridLine = realLeft - (realLeft % gridSize);
    const int firstTopGridLine = realTop - (realTop % gridSize);

    QVarLengthArray<QLine, 100> lines;

    for (qreal x = firstLeftGridLine; x <= realRight; x += gridSize)
        lines.append(QLine(x, realTop, x, realBottom));
    for (qreal y = firstTopGridLine; y <= realBottom; y += gridSize)
        lines.append(QLine(realLeft, y, realRight, y));

    //painter->setRenderHint(QPainter::Antialiasing);
    painter->setPen(QPen(QColor(220, 220, 220), 0.0));
    painter->drawLines(lines.data(), lines.size());

    // Draw axes.
    painter->setPen(QPen(Qt::lightGray, 0.0));
    painter->drawLine(0, realTop, 0, realBottom);
    painter->drawLine(realLeft, 0, realRight, 0);
}
void场景::牵引地面(QPainter*painter、const qrect和rect)
{
const int gridSize=50;
const int reallleft=static_cast(std::floor(rect.left());
const int realRight=static_cast(std::ceil(rect.right());
const int realTop=static_cast(std::floor(rect.top());
const int realBottom=static_cast(std::ceil(rect.bottom());
//绘制网格。
const int firstLeftGridLine=realLeft-(realLeft%gridSize);
const int firstTopGridLine=realTop-(realTop%gridSize);
QVarLengthArray线;
对于(qreal x=firstLeftGridLine;x setPen(QPen(QColor(220,220,220),0.0));
画师->绘图线(lines.data(),lines.size());
//画轴。
painter->setPen(QPen(Qt::浅灰色,0.0));
画师->绘图线(0,realTop,0,realBottom);
画师->绘图线(realLeft,0,realRight,0);
}
但是,除非我启用抗锯齿功能,否则移动项目有时会在网格(未绘制项目的区域)中留下瑕疵。这似乎主要发生在低缩放级别,当视图稍微缩小时。你知道我可能在这里做错了什么吗

我真的不想打开抗锯齿,因为线条是严格水平和垂直的,我希望它们尽可能清晰

任何帮助都是非常值得的,
关于这一点,Elvis听起来好像需要使用不同的视口更新方法:

可能还有后台缓存:


在绘制之前,您是否尝试过明确删除场景内容?尝试绘制一个白色矩形(或任何背景颜色)在绘制网格线之前,看看这是否有帮助。您是否尝试过先调用基类函数?也许应该先擦除背景:
qgraphicscene::trackground(painter,rect)
,然后是所有自定义代码。您尝试过调用setViewportUpdateMode(QGraphicsView::FullViewportUpdate)吗在您的程序开始时?我遇到了一个smiliar问题,在添加“setViewportUpdateMode(QGraphicsView::FullViewportUpdate)”后问题得到了解决,但不确定性能会受到什么影响。请检查我的问题,哪一个比使用完全更新有更好的解决方案: