【发布时间】:2018-09-05 22:27:15
【问题描述】:
我正在尝试使用QPainter 绘制一个 3 像素的大点。但下面的代码改为绘制一条宽度为 3 像素的水平线。
#include <QPainter>
#include <QImage>
int main()
{
const int w=1000, h=1000;
QImage img(w, h, QImage::Format_RGBX8888);
{
QPainter p(&img);
p.fillRect(0,0,w,h,Qt::black);
p.scale(w,h);
p.setPen(QPen(Qt::red, 3./w, Qt::SolidLine, Qt::RoundCap));
p.drawPoint(QPointF(0.1,0.1));
}
img.save("test.png");
}
这是生成图像的左上角:
我希望得到一个红色圆圈或至少一个正方形的点,但我得到的是这条线段。如果我注释掉p.scale(w,h) 并在位置(100,100) 处绘制宽度为3(而不是3./w)的点,那么我会得到一个高度和宽度几乎对称的3 像素点。
发生了什么事?为什么我得到的是线段而不是预期的点?以及如何解决它,而不是求助于绘制椭圆或避免QPainter::scale?
我在带有 g++ 5.5.0 的 Linux x86 上使用 Qt 5.10.0。 Qt 5.5.1 也是如此。
【问题讨论】:
-
你想要一个三像素的大点还是一个破折号?如果你想要破折号,那么你应该使用 Qt::DotLine 而不是 SolidLine。编辑您的问题以明确您的目标
-
@Gurushant 我虽然第一句话已经说过我想要一个观点。 point 不是 dot 的同义词吗?
-
是的,当然,但后来你说“那我得到正常点,而不是“破折号””。我不明白你在这里的意思。
-
@Gurushant 好的,我已经试着澄清了,请看看是否更好。