2013-07-27 68 views
1

我這個訪問的QGraphicsView每個選項卡上(在QTabWidget)

void MainWindow::on_actionOpen_triggered() 
    { 
     QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), QDir::currentPath()); 
     if (!fileName.isEmpty()) { 
      QImage image(fileName); 
      if (image.isNull()) { 
       QMessageBox::information(this, tr("Master Measure"), 
           tr("Cannot load %1.").arg(fileName)); 
       return; 
      } 

      scene = new QGraphicsScene; 
      view = new QGraphicsView; 

      view->setScene(scene); 
      tabWidget->addTab(view,"someTab"); 

      scene->addPixmap(QPixmap::fromImage(image)); 
      scene->setBackgroundBrush(QBrush(Qt::lightGray, Qt::SolidPattern)); 

      QFileInfo fileInfo = fileName; 
      tabWidget->setTabText(ui->tabWidget->count()-1, fileInfo.baseName()); 
      tabWidget->setCurrentIndex(ui->tabWidget->count()-1); 
     } 
    } 

我想通過點擊繪製每個圖像上的東西在QGraphicsScene和的QGraphicsView一個新標籤打開每個圖像。

,所以我不希望這Click按鍵事件

void MainWindow::mousePressEvent(QMouseEvent *event) 
{ 
    QPen pen(Qt::black); 
    QBrush brush(Qt::red); 
    pen.setWidth(6); 
    scene->addEllipse(0,0,1000,500,pen,brush); 
} 

它只是繪製橢圓最後打開的圖像(標籤)上。

我不知道如何解決這個問題。

我很欣賞任何想法。 謝謝。

回答

0

顯然scene變量指向最後創建的場景。當你創建新的場景時,舊的指針會丟失,因爲你沒有將它保存到任何地方。所以你需要保留所有場景並查看指針,並使用當前可見的對象。

我建議你創建一個QGraphicsView的子類(我們稱之爲MyView),它將負責每個標籤的內容。將文件名傳遞給此對象的構造函數。在構造函數中創建一個場景並將其存儲在成員變量中。重新執行MyView::mousePressEvent來執行繪圖。

然後,可以添加新的標籤是這樣的:

MyView* view = new MyView(filename); 
view ->addTab(view,"someTab"); 

當用戶點擊一個視圖,MyView::mousePressEvent方法或相應MyView對象將被調用。每個視圖只會看到自己的scene變量,並且相應的場景將被編輯。

+0

謝謝你,你的權利。我會做你說的,我會分享後果。 – dare

+0

它工作@Riateche。謝謝。 – dare

相關問題