У меня есть изображение, на которое я рисую Прямоугольник как таковой. После этого я пытаюсь скопировать содержимое прямоугольника на другой 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);
Нижнее изображение - изображение с красным прямоугольником в нем, и это нормально. Верхнее изображение - это копия содержимого квадрата. Единственная проблема заключается в том, что он не начинается с верхнего левого угла.
Любое предложение о том, почему я не получаю скопированный контент в верхнем левом углу.
Спасибо, что сделал трюк прекрасно вы могли бы объяснить, что происходит в 'painter_two.drawPixmap (targetRect, цели, sourceRect);' и почему мы создали новый 'QRectF' sourceRect ? – MistyD
@MistyD рисует часть исходного изображения в целевой прямоугольной области. sourceRect создан, чтобы сделать код понятным, но технически вы можете его удалить и просто использовать «прямоугольник». – vahancho