在 Qt 中,如果提供负值参数,则 drawPoint 方法不会绘制任何内容

In Qt drawPoint method does not plot anything if negative valued parameters are supplies

如果传递负值参数,Qt creator drawPoint() 方法不会放置点 以下是 Bresenham algorithm.but 的代码,它在 qt creator.it 中不起作用,只是在一个象限中绘制圆。

Bresenham::Bresenham(QWidget*parent):QWidget(parent)  
{}

void  Bresenham::paintEvent(QPaintEvent *e)  
{  
     Q_UNUSED(e);  
     QPainter qp(this);  
     drawPixel(&qp);  
}  
void  Bresenham::drawPixel(QPainter *qp)  
{  
    QPen pen(Qt::red,2,Qt::SolidLine);  
    qp->setPen(pen);  
    int x=0,y,d,r=100;  
    y=r;  
    d=3-2*r;  
    do  
    {  
       qp->drawPoint(x,y);  
       qp->drawPoint(y,x);  
       qp->drawPoint(y,-x);  
       qp->drawPoint(x,-y);  
       qp->drawPoint(-x,-y);  
       qp->drawPoint(-y,-x);  
       qp->drawPoint(-x,y);  
       qp->drawPoint(-y,x);
       if(d<0)  
       {  
          d=d+4*x+6;  
       }  
       else  
       {  
          d=d+(4*x-4*y)+10;  
          y=y-1;  
       }  
       x=x+1;  
      }while(x<y); 
}

您需要将 Qt 坐标系转换为经典的笛卡尔坐标系。选择一个新中心 QPoint orig 并替换所有

qp->drawPoint(x,y);  

qp->drawPoint(orig + QPoint(x,y));

Qt coordinates system原点在(0,0),y-axis倒转。例如,从 A(2,7)B(6,1) 的片段如下所示:

注意只有 positive-x、positive-y 象限。为简单起见,假设不存在负坐标。

注:

出于性能原因,最好先计算所有点,然后使用

绘制它们
QPainter::drawPoints ( const QPoint * points, int pointCount );