我想在我的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, 问候,猫王
在绘图之前,您是否尝试明确地擦除场景的内容?在绘制网格线之前,尝试绘制一个白色的矩形(或任何背景颜色),看看是否有帮助。 – Thomi 2010-05-06 07:48:40
您是否尝试过首先调用基类函数?也许它应该首先清除背景:'QGraphicsScene :: drawBackground(painter,rect)',然后是所有自定义代码。 – 2010-12-06 16:05:18
你有没有试过在你的程序开始时调用setViewportUpdateMode(QGraphicsView :: FullViewportUpdate)? – Tom 2011-03-23 10:05:46