2010-05-06 42 views
2

我想在我的QGraphicsScene子类的drawBackground()函数来绘制背景网格绘制背景电网无抗混叠时:文物试图在QGraphicsScene

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); 
} 

但是,除非我打开消除锯齿,移动项目有时会在网格中留下伪像(未绘制区域)。它似乎主要发生在低缩放级别,当视图缩小一点。任何想法我可能在这里做错了吗?

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

任何帮助大大appriciated, 问候,猫王

+0

在绘图之前,您是否尝试明确地擦除场景的内容?在绘制网格线之前,尝试绘制一个白色的矩形(或任何背景颜色),看看是否有帮助。 – Thomi 2010-05-06 07:48:40

+0

您是否尝试过首先调用基类函数?也许它应该首先清除背景:'QGraphicsScene :: drawBackground(painter,rect)',然后是所有自定义代码。 – 2010-12-06 16:05:18

+0

你有没有试过在你的程序开始时调用setViewportUpdateMode(QGraphicsView :: FullViewportUpdate)? – Tom 2011-03-23 10:05:46

回答

2

听起来像是你需要使用不同的视口更新方法:

http://doc.qt.io/qt-5/qgraphicsview.html#viewportUpdateMode-prop

,也许后台缓存:

http://doc.qt.io/qt-5/qgraphicsview.html#cacheMode-prop

+0

我得到了smiliar的问题,并在我添加“setViewportUpdateMode(QGraphicsView :: FullViewportUpdate)”后修复,虽然不知道性能如何受到影响。 – Vincent 2012-05-29 07:49:05

+0

检查我的问题,有比使用完整更新更好的解决方案:http://stackoverflow.com/questions/13933699/qgraphicslineitempaint-artifacts – paulm 2012-12-20 13:26:26