void paintEvent(QPaintEvent *)
修改为
void MainScene::paintEvent(QPaintEvent *)
不知道你这个问题是否已经解决, 如果还没有解决的话:绘制时,像素渲染由QPainter::Antialiasing
render hint控制。
RenderHint
枚举用于指定QPainter的标志,这些标志可能会被任何给定引擎所遵循,也可能不会被任何给定的引擎所遵循。QPainter::Antialiasing值指示引擎应尽可能对基本体的边缘进行抗锯齿,即使用不同的颜色强度平滑边缘。
但默认情况下,painter是走样的(aliased),这时的规则是:当使用1像素宽的笔进行渲染时,像素将被渲染到数学定义的点的右下方。例如:(QPen:1像素宽)
当使用像素为偶数的笔进行渲染时,像素将围绕数学定义的点对称渲染;而使用像素为奇数的笔渲染时,多余的像素将渲染到数学点的右侧和下方,就像在一个像素的情况下一样。具体示例请参见下面的QRectF图。
请注意,由于历史原因,对于QRect
(而非QRectF),QRect::right()
和QRect::bottom()
函数的返回值偏离了矩形的真实右下角。
QRect
的right()函数返回left()+width()-1
,bottom()函数则返回top()+height()-1
。图中右下角的绿色点显示了这些函数的返回坐标。
我们建议你只使用QRectF
:QRectF类使用浮点坐标在平面中定义一个矩形,以确保准确性(QRect使用整数坐标),QRectF::right()
和QRectF::bottom()
函数确实会返回 [真实的] 右下角。
或者,使用QRect
,应用x()+width()
和y()+height()
来查找右下角,并避免使用right()和bottom()函数。