그래픽 편집기를 구현하는 방법에 대해 약간의 질문이 있습니다. 그림의 경우이 방법을 사용합니다. 먼저 마우스 왼쪽 버튼을 클릭했는지 확인한 다음 QPixmap의 event-> pos()에서 한 픽셀을 그립니다. 그런 다음 update()를 호출합니다. 그것을 다시 그리기. 또한 QPixmap에 두 개의 점 사이에 선을 그려야합니다. 마우스가 눌려진 버튼으로 움직이면 (왜냐하면 그것 없이는 점들 만있을 것이기 때문입니다). 꽤 잘 작동하지만이 작업을 수행하는 데 더 최적화 된 방법이 있는지 알고 싶습니다. 여기에 몇 가지 코드의QPixmap의 최적화 된 그림
void Editor::paintEvent(QPaintEvent *event)
{
painter.drawPixmap(QRect(0, 0, image.width() * zoom , image.height() * zoom),
image);
}
void Editor::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
setImagePixel(event->pos());
}
}
void Editor::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton)
{
setImagePixel(event->pos(), true);
}
}
void Editor::setImagePixel(const QPoint &pos)
{
QPainter painter(&image);
if(image.rect().contains(i, j))
{
painter.begin(&image);
painter.setPen(primaryColor);
painter.drawPoint(i, j);
painter.end();
}
}
와우 ... 정말 고마워요. 정말 도움이되었습니다.^_^ 휠을 다시 발명 할 필요가 없기 때문에 기쁩니다. 좋은 하루 되세요. –
질문이 하나 더 있습니다. 다른 너비의 펜을 사용하려고했습니다. 그러나 이렇게 좋지는 않습니다 -> http://i.imgur.com/lNdKO.png. 나는 항상 많은 경로를 그리기 때문이라고 생각합니다. 이걸 어떻게 없앨 수 있습니까? –
'QPainter :: setRenderHint (QPainter :: Antialiasing, true)'를 시도 했습니까? 나는 많은 경로를 항상 그려야 함을 이해하지 못합니다. 그러나 렌더링 된 결과와 관련이 있는지 확실하지 않습니다. – azf