1

我正在尝试创建一个 Dicom GUI 工具包,用户在其中选择一些 dicom 图像,并将显示所选图像中的第一个 dicom 图像的图像。然后用户单击图像,图像会弹出更大的图像窗口。在这个显示的较大图像中,图像将由一个红色矩形组成,其中包含 Dicom 图像的必要区域,而不必要的区域位于矩形之外。然后,用户应该可以选择通过鼠标更改矩形。

到目前为止,我已经能够使用QLabel以下代码片段显示带有矩形的大 dicom 图像。

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();
}

应用程序上的大图如下所示:

在此处输入图像描述

您能否建议我现在应该如何使用户可以编辑矩形,用户可以根据自己的意愿设置现有的红色矩形?

我也尝试了类似的事情,QGraphicsViewQGraphicsScene使用以下代码:

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

这段代码给了我以下外观:

在此处输入图像描述

如您所见,我无法将图像拟合到 的边界QGraphicsView,您能建议我怎么做吗?您能否建议我如何在不添加矩形的情况下在 上添加红色矩形(我在示例中使用 显示QLabel)?QGraphicsViewQPixmap

4

1 回答 1

2

为了获得红色选择矩形,Qt 提供了QRubberBand类。文档状态:

QRubberBand 类提供了一个可以指示选择或边界的矩形或线。

通过子类化图像对象并实现鼠标处理函数,在 mousePressEvent 上创建橡皮筋,在 mouseMoveEvent 上更新其位置并在 mouseReleaseEvent 上获取其最终矩形,QRubberBand 将简化问题。

如果您希望 QRubberBand 一直显示,只需在显示放大图像时创建它,不要在释放鼠标按钮时隐藏它。

至于在 QGraphicsView 中显示图像,您显示的代码没有设置 QGraphicsScene 和 QGraphicsView 的几何形状,因此您看到的是边框。如果你不希望这样,你应该相应地设置它们。另请注意,QGraphicsView 有一个函数 fitInView,您可以在从 QRubberBand 检索到一个区域后使用它来放大所选区域。

于 2013-08-28T13:29:22.343 回答