Интерактивно редактировать существующий прямоугольник на QPixmap?

Я пытаюсь создать Dicom GUI Toolkit, где пользователь выбирает некоторые изображения dicom, и будет отображаться изображение первого изображения dicom из выбранных. Затем пользователь нажимает на изображение, и изображение выскакивает с большим окном изображения. В этом увеличенном изображении изображение будет состоять из прямоугольника красного цвета, который содержит необходимые области изображения Dicom, в то время как ненужная область находится за пределами прямоугольника. Затем пользователь должен иметь возможность изменить прямоугольник с помощью мыши.

До сих пор я был в состоянии показать большое изображение DICOM с прямоугольником в нем, используя QLabel что по следующим фрагментам кода.

void MainWindow::showBigImage()
{
QPixmap bigimage;
bigimage.load(imageName.c_str());
QPainter painter(&bigimage);
painter.setPen(Qt::red);
QRectF rect(xmin, ymin, xmax, ymax);
painter.drawRect(rect);
QSize bigsize = ui->bigImageLabel->size();
ui->bigImageLabel->setPixmap(bigimage.scaled(bigsize, Qt::IgnoreAspectRatio, Qt::FastTransformation));
ui->bigImageLabel->show();
}

и большое изображение в приложении выглядит следующим образом:

введите описание изображения здесь

Можете ли вы предложить мне, как я должен теперь сделать прямоугольник редактируемым пользователем, где пользователь может установить существующий красный прямоугольник по своему желанию?

Я тоже пробовал аналогичную вещь используя QGraphicsView а также QGraphicsScene со следующим кодом:

void MainWindow::showBigImage()
{
QGraphicsScene* scene = new QGraphicsScene;
scene->addPixmap(bigimage);
ui->bigImageView->setScene(scene);
ui->bigImageView->show();
}

И этот код дает мне следующий вид:

введите описание изображения здесь

Как видите, я не смог подогнать изображение под границы QGraphicsViewНе могли бы вы предложить мне, как это сделать? Не могли бы вы также предложить мне, как добавить красный прямоугольник (который я показал в примере, используя QLabel) на QGraphicsView без добавления прямоугольника на QPixmap?

1

Решение

Чтобы получить красный прямоугольник выбора, Qt предоставляет класс QRubberBand. Документы утверждают:

Класс QRubberBand предоставляет прямоугольник или линию, которая может указывать выделение или границу.

Подклассифицируя объект изображения и реализуя функции обработки мыши, чтобы создать резиновую полосу на mousePressEvent, обновить ее положение на mouseMoveEvent и захватить его последний прямоугольник на mouseReleaseEvent, QRubberBand упростит проблему.

Если вы хотите, чтобы QRubberBand показывался постоянно, просто создайте его при отображении увеличенного изображения и не скрывайте его при отпускании кнопки мыши.

Что касается отображения изображения в QGraphicsView, код, который вы отображаете, не устанавливает геометрию QGraphicsScene и QGraphicsView, поэтому вы видите границу. Если вы не хотите этого, вы должны установить их соответствующим образом. Также обратите внимание, что QGraphicsView имеет функцию fitInView, которую вы можете использовать после извлечения области из QRubberBand, чтобы увеличить масштаб выбранной области.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]