2015-02-02 37 views
2

얼마 동안 Qt/C++로 간단한 그림과 페인팅 앱을 개발하고 있습니다.Qt에서 픽스맵 브러시로 선 그리기?

현재 QPainter :: drawLine()을 사용하여 그리는 중입니다. 제대로 작동합니다.

내가하고 싶은 것은 pixmap 브러시로 그리기입니다. QPainterPath와 QPainter :: strokePath()를 사용하여 단일 색으로 채워진 픽스맵으로 그릴 수 있습니다. 픽스맵이있는 브러쉬를 사용하여 펜으로 패스를 그립니다.

QPen 및 QPainter :: strokePath()를 사용하면 여전히 문제가 있습니다. 바둑판 식으로 된 선으로 된 선이 생깁니다. 하지만 픽스맵을 그려야합니다. 일부 이미지 편집자의 이미지 기반 브러시와 같습니다. drawRect()로 그 일을 할 수는 있지만 픽스맵을 그립니다.

쓴 말로 내 문제를 이해한다면 어떻게하면 픽스맵 브러시로 선을 그릴 수 있습니까? 편집

:

void Canvas::mouseMoveEvent(QMouseEvent *event) 
{ 
    polyLine[2] = polyLine[1]; 
    polyLine[1] = polyLine[0]; 
    polyLine[0] = event->pos(); 

    //Some stuff here 
    painter.drawLine(polyLine[1], event->pos()); 
} 

이것은 내가 뭘하려 : 여기 내가 현재하는 일이다

void Canvas::mouseMoveEvent(QMouseEvent *event) 
{ 
    QPen pen(brush, brushSize, Qt::SolidLine, Qt::RoundCap, Qt::BevelJoin); 
    //Some stuff here 
    path.lineTo(event->pos()); 
    painter.strokePath(path, pen); 
    //This creates a fine line, but with a tiled brush 
} 

마우스의 움직임을 따라 픽스맵을 그리려면, 나는

void Canvas::mouseMoveEvent(QMouseEvent *event) 
{ 
    //Some stuff 
    QBrush brush(QPixmap(":images/fileName.png")); 
    painter.setBrush(brush); 
    painter.setPen(Qt::NoPen); 
    painter.drawRect(QRect(event->pos() - brushSize/2, event->pos() - brushSize/2, brushSize, brushSize)); 
    //This draws the pixmaps with intervals. 
} 
+0

의 중복 가능성 (http://stackoverflow.com/questions/18502611/line-interpolation-in-qt) – UmNyobe

+0

그것은이다 : 참고로, 나는 여기에 코드를 복사합니다 중복 가능성이 있기 때문에 답변을 모두 적용 할 수 있습니다. 그렇지만 질문과 제목이 약간 다르므로 pixmap 브러시에 대한 답변을 찾고 있다면 Google 검색에서 쉽게 찾을 수 있다고 생각합니다. 우선, 내 대답을 검색하는 동안 다른 대답을 찾을 수 없었습니다. StackOverflow에 등록한 후에 만 ​​보았습니다. –

+0

다른 문제와 동일한 문제입니다. 실제로 당신의 질문은 더 잘 표현됩니다. – UmNyobe

답변

2

시도 신경 쓰지 마라. 나는 해결책을 찾았다. here

대답은 패스를 따라 픽스맵을 반복적으로 그리는 방법을 보여줍니다. 훌륭합니다. [? Qt는의 라인 보간]

QPointF lastPosition, currentPosition; 
qreal spacing; 

void draw() { 
    QPainterPath path; 
    path.moveTo(lastPosition); 
    path.lineTo(currentPosition); 
    qreal length = path.length(); 
    qreal pos = 0; 

    while (pos < length) { 
     qreal percent = path.percentAtLength(pos); 
     drawYourPixmapAt(path.pointAtPercent(percent)); // pseudo method, use QPainter and your brush pixmap instead 
     pos += spacing; 
    } 
}