Qt를 사용하여 C++에서 Paint 응용 프로그램을 만들려고합니다. 클릭하거나 클릭 할 때마다 & 마우스를 드래그하면 프로그램이 pixmap에 무언가를 그릴 것입니다. 그런 다음, 창에 pixmap을 그릴 paintEvent()를 호출하는 윈도우를 업데이트합니다.Qt drawPixmap이 예상 한 그림을 그리지 않습니다.
void QPaintArea::mousePressEvent(QMouseEvent *event){
startpoint = event->pos();
drawPoint(startpoint);
is_pressed = true;
}
void QPaintArea::mouseReleaseEvent(QMouseEvent *event){
is_pressed = false;
}
void QPaintArea::mouseMoveEvent(QMouseEvent *event){
if(is_pressed == true){
endpoint = event->pos();
drawLine(startpoint, endpoint);
startpoint = endpoint;
}
else{
return;
}
}
void QPaintArea::paintEvent(QPaintEvent *event){
QDesktopWidget *desktop = QApplication::desktop();
int x = (desktop->width() - 800)/2;
int y = (desktop->height() - 600)/2;
QPainter painter(this);
QRect target(QPoint(x, y - 35), QSize(800, 600));
QRect dirtyrect(QPoint(0,0), QSize(800, 600));
painter.drawPixmap(target, *pixmap, dirtyrect);
}
문제는 프로그램이 예상대로 창에 pixmap을 인쇄하지 않는다는 것입니다. 예를 들어 x : 17, y : 82에서 마우스를 눌러 무언가를 그립니다. 이 프로그램은 내가 그린 것부터 x + 20, y와 같은 오프셋 된 위치에 인쇄합니다.
아마도 QRect 또는 drawPixmap 작동 방식을 완전히 이해하지 못했지만 pixmap은 800x600입니다. "dirtyrect"는 전체 pixmap (x : 0, y : 0 및 크기 800x600 시작)을 저장해야합니다.
QPaintArea 무엇을, 해당 이벤트의 위치를 기억 상대적 위젯, 당신이, 당신의 픽스맵 예를 들어 약간의 여백을 그래서 만약 위치는 0 + margin-left, 0 + margin-top –
QPaintArea는 나로 만든 클래스입니다. – Kanghu
단지 힌트지만, Qt에 대해 Q 접두사를 유지하면, 당신을 위해 다른 것을 선택해야합니다 :). 레이아웃을 설정 했습니까? –