Я пытаюсь создать 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
?
Чтобы получить красный прямоугольник выбора, Qt предоставляет класс QRubberBand. Документы утверждают:
Класс QRubberBand предоставляет прямоугольник или линию, которая может указывать выделение или границу.
Подклассифицируя объект изображения и реализуя функции обработки мыши, чтобы создать резиновую полосу на mousePressEvent, обновить ее положение на mouseMoveEvent и захватить его последний прямоугольник на mouseReleaseEvent, QRubberBand упростит проблему.
Если вы хотите, чтобы QRubberBand показывался постоянно, просто создайте его при отображении увеличенного изображения и не скрывайте его при отпускании кнопки мыши.
Что касается отображения изображения в QGraphicsView, код, который вы отображаете, не устанавливает геометрию QGraphicsScene и QGraphicsView, поэтому вы видите границу. Если вы не хотите этого, вы должны установить их соответствующим образом. Также обратите внимание, что QGraphicsView имеет функцию fitInView, которую вы можете использовать после извлечения области из QRubberBand, чтобы увеличить масштаб выбранной области.
Других решений пока нет …