我正在Qt应用程序中绘制线条和点,并且在QPainter中出现了一个看起来像是缩放错误的问题。我的线条工作得很好,但某些刻度的变化会影响点,尽管笔被设定为“化妆品”。最让我困扰的是,只有一个轴(x轴)似乎受到了影响。否则,我可以将其确定为转换/矩阵代码中的一些浮点精度问题。
Qt版本:QT4.8用于嵌入式,QT5.4用于桌面,QT5.6LTS用于桌面
以下是一些实际上应该看起来都一样的渲染(比如最左边的):
我有一个从RenderArea派生出来的QWidget,它简单地绘制了上面的一个图像。RenderArea只是在main()中实例化并显示出来。这里的代码很简单,下面是相关的绘画代码:
void RenderArea::paintEvent(QPaintEvent* /* event */)
{
const qreal scaleFactor = 0.01;
// Define a "unit" square
std::vector<QPointF> points;
points.push_back(QPointF(0, 0));
points.push_back(QPointF(1.0, 0));
points.push_back(QPointF(1.0, 1.0));
points.push_back(QPointF(0, 1.0));
// Build a scaled version of the points
for (unsigned i = 0; i < points.size(); i++) {
points[i] *= scaleFactor;
}
QPainter painter(this);
painter.save();
// Scale the painter so that every square takes 100 pixels
// in screen space regardless of the scaleFactor:
painter.scale(100.0 / scaleFactor, 100.0 / scaleFactor);
QPen pointPen(Qt::blue, 10);
pointPen.setCosmetic(true);
painter.setPen(pointPen);
painter.drawPoints(points.data(), points.size());
QPen linePen(Qt::red, 5);
linePen.setCosmetic(true);
painter.setPen(linePen);
painter.drawPolyline(points.data(), points.size());
painter.restore();
}
该示例基于Qt附带的基本绘图示例,但为了突出问题,我剥离了所有内容。
发布于 2018-10-31 13:38:06
要结束这个主题,我想添加一个对另一个堆栈溢出问题的引用:为什么QPainter::drawPoint画一个水平线段?
它似乎是Qt中的一个bug,它在这里归档:QPainter::延点画线段代替点
正如注释中指出的那样,可以通过为绘图点编写自己的代码、修补Qt、绘制图像而不是点或使用drawEllipse来克服此缺陷。
https://stackoverflow.com/questions/52181274
复制相似问题