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

时间:2015-01-14 05:12:40

标签: qt qpainter

如果传递负值参数,Qt creator中的

drawPoint()方法不会指向 以下是Bresenham算法的代码。但是,它不适用于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); 
}

1 个答案:

答案 0 :(得分:0)

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

qp->drawPoint(x,y);  

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

Qt coordinates system原点位于(0,0),y轴反转。例如,从A(2,7)B(6,1)的细分如下:

enter image description here

注意如何只有正x,正y象限。为简单起见,假设没有负坐标。

注意:

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

绘制所有点
QPainter::drawPoints ( const QPoint * points, int pointCount );