2013-08-28 30 views
1

我試圖創建一個Dicom GUI工具包,用戶選擇一些dicom圖像,並從選定的圖像中顯示第一個dicom圖像。然後用戶點擊圖像,圖像彈出並顯示更大的圖像窗口。在這張較大的圖像中,圖像將由一個紅色的矩形組成,該矩形包含Dicom圖像的必要區域,而不必要的區域位於矩形的外部。用戶應該可以選擇通過鼠標改變矩形。以交互方式編輯QPixmap上的現有矩形?

到現在爲止,我已經能夠使用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(); 
} 

,並在應用程序中的大圖如下所示:

enter image description here

你可以請建議我如何把現在做的長方形編輯用戶,用戶可以設置現有的紅色長方形是否符合他或她的願望?

我使用QGraphicsViewQGraphicsScene用下面的代碼也試過類似的事情:

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

而且這個代碼給我下面的樣子:

enter image description here

正如你所看到的,我可以不符合QGraphicsView的邊界圖像,你能建議我該怎麼做嗎?你能否也建議我如何在QGraphicsView上添加紅色矩形(我在示例中使用QLabel顯示),而不在QPixmap上添加矩形?

+0

要適合一個窗口,你可能想看到: http://stackoverflow.com/questions/9654222/how-to-fit-in-view-the-pixmaps-in-q-graphicsview-qgraphicsscene-without-changing – user2244507

+0

我之前看到過這個問題,我無法理解如何重新實現resizeEvent。我必須提及,我是Qt的新手,並且遠離C++的效率。 –

回答

2

爲了獲得紅色的選擇矩形,Qt提供了類QRubberBand。文檔狀態:

QRubberBand類提供了一個可以指示選區或邊界的矩形或線條。

通過繼承圖像對象和執行鼠標操作的功能,對mousePressEvent創建橡膠帶,更新mouseMoveEvent其位置和抓住它的上mouseReleaseEvent最終RECT,所述QRubberBand將簡化的問題。

如果您想讓QRubberBand隨時顯示,只需在顯示放大的圖像時創建它,而不要在釋放鼠標按鈕時將其隱藏。

至於在QGraphicsView中顯示圖像,您顯示的代碼不會設置QGraphicsScene和QGraphicsView的幾何圖形,因此您會看到邊框。如果你不想這樣做,你應該相應地設置它們。另外請注意,QGraphicsView有一個函數fitInView,您可以在從QRubberBand中檢索區域後使用該函數,以放大所選區域。

+0

但是甚至在用戶使用任何鼠標移動改變矩形之前存在的紅色矩形呢?我怎樣才能使它可編輯的方式,矩形只會改變,當用戶用鼠標光標觸摸它?有可能用QRubberBand做到這一點嗎? –

+0

「存在的紅色矩形」是什麼意思?你有沒有從另一個部件? – TheDarkKnight

+0

反正我管理它:)。不,我在QPixmap上繪製它,因爲我在圖像上顯示它。但現在我管理它:)。謝謝。偉大的建議:)。 –

相關問題