如何在Qt中缩放具有亚像素宽度的线

How to scale a line with sub-pixel width in Qt?

本文关键字:像素 Qt 缩放      更新时间:2023-10-16

我想在原图像坐标系下显示带有直线和多边形的缩放图像,无论显示缩放,像素始终为1x1正方形。例如,我想显示一条从像素(0,0)中心到像素(9,9)中心的细线段,但是下面的代码片段产生一条粗线,因为比例太高了:

int main(int argc, char *argv[])
{
  const int scale = 44;
  QApplication   a(argc, argv);
  QGraphicsScene scene;
  QGraphicsView  view(&scene);
  QImage         image("test.bmp");
  auto           line = new QGraphicsLineItem (0.5, 0.5, 9.5, 9.5);
  line->setPen(QPen(Qt::blue));
  scene.addPixmap(QPixmap::fromImage(image));
  scene.addItem(line);
  view.scale(scale, scale);
  view.show();
  return a.exec();
}

如何使这条线变细,使其在对宽度应用比例之前具有亚像素厚度,从而使最终厚度小于scale的值?

这可以通过使用重新缩放的坐标(scale*0.5, scale*0.5, scale*9.5, scale*9.5)来实现,但我想避免这种情况。

看一下void QPen::setWidth(int width)和void QPen::setWidthF(qreal width)。

QPen pen(Qt::blue);
pen.setWidth(0);
line->setPen(pen);