2014-01-14 4 views
2

저는 직사각형을 그리는 이미지가 있습니다. 그런 다음 사각형의 내용을 다른 QLabel로 복사하려고합니다. 이것은 작동하지만 복사 된 이미지를 이미지의 왼쪽 상단 모퉁이에서 정렬 할 수없는 것 같습니다. 여기에 내가하고있는 일이있다QPixmap 다른 이미지로 그려진 사각형의 내용을 복사하십시오.

QPixmap original_image; 
original_image.load("c:\\Images\\myimg.jpg"); 
original_image = original_image.scaled(ui.label->size().width(),ui.label->size().height()); 

//----------------------------------------------------------------------- 
//Draw rectangle on this 
QPixmap target_two(ui.label->size().width(),ui.label->size().height()); 
target_two.fill(Qt::transparent);  

QPixmap target(ui.label->size().width(),ui.label->size().height()); 
target.fill(Qt::transparent);  

QPainter painter(&target); 
QPainter painter_two(&target_two); 


QRegion r(QRect(0, 0, ui.label->size().width(), ui.label->size().height()), QRegion::RegionType::Rectangle); //Region to start copying 
painter.setClipRegion(r); 
painter.drawPixmap(0, 0, original_image); //Draw the original image in the clipped region 


QRectF rectangle(x_start,y_start,clipRegion); 
painter.drawRoundedRect(rectangle,0,0); //Last two parameters define the radius of the corners higher the radius more rounded it is 

      QRegion r_two(rectangle.toRect(), QRegion::RegionType::Rectangle); 
      painter_two.setClipRegion(r_two); 
      painter_two.drawPixmap(0,0,target); 


ui.label->setPixmap(target);  

ui.label_2->setPixmap(target_two); 

아래 그림은 빨간색 사각형이있는 이미지이며 괜찮습니다. 위쪽 그림은 사각형 내용의 복사본입니다. 유일한 문제는 왼쪽 상단에서 시작하지 않는 것입니다.

왼쪽 상단에 복사 된 콘텐츠가 표시되지 않는 이유에 대한 제안.

답변

1

논리의 문제는 target 및 target_two 이미지의 크기가 레이블의 크기와 같고 복사 된 이미지를 초기 레이블과 동일한 위치에 그립니다. 여태까지는 그런대로 잘됐다. 완벽하게 당신이 painter_two.drawPixmap (targetRect, 대상으로서, sourceRect)`에서 무슨 설명 할 수 속임수를 썼는지

[..] 
// This both lines can be removed. 
// QRegion r_two(rectangle.toRect(), QRegion::RegionType::Rectangle); 
// painter_two.setClipRegion(r_two); 

// Target rect. in the left top corner. 
QRectF targetRect(0, 0, rectangle.width(), rectangle.height()); 
QRectF sourceRect(rectangle); 
// Draw only rectangular area of the source image into the new position. 
painter_two.drawPixmap(targetRect, target, sourceRect); 
[..] 
+0

감사합니다,'왜 우리는 새로운'QRectF'으로서, sourceRect 생성 : 나는 다음과 같은 코드에 의해이 문제를 해결 것 ? – MistyD

+0

@MistyD 소스 이미지의 일부를 대상 사각형 영역으로 그립니다. 코드를 이해하기 쉽게 만들기 위해 생성 된 sourceRect이지만 기술적으로는 드롭 다운하고 '직사각형'만 사용하면됩니다. – vahancho