2017-10-20 223 views
1

如何更改QGraphicView所選項目的顏色。在此代碼中可以從QGraphicView中選擇項目並刪除並且還能夠禁用項目移動。如何更改所選項目的顏色。如何更改所選的QGraphicView項目顏色

void Widget::on_btnDelete_clicked() 
{ 
    foreach (QGraphicsItem *item,ui->graphicsView->scene()->selectedItems()) { 
     delete item; 
    } 
} 

void Widget::on_btnMoveDis_clicked() 
{ 
    foreach (QGraphicsItem *item,ui->graphicsView->scene()->selectedItems()) { 
     item->setFlag(QGraphicsItem::ItemIsMovable,false); 
    } 
} 

回答

1

起初我建議你仔細閱讀QGraphicsView實例和文檔,我建議Diagram Scene ExampleElastic Nodes Example爲出發點。由於QGraphicsView框架工作聰明,如果你使用它聰明,否則你可能會支付罰款性能

現在你的問題:

全部答案是關係到qgraphicsitem_cast,如何使用它?

首先讓我提供一些初始化下面的代碼,首先給場景添加三個矩形並設置它們的標誌。

void MainWindow::on_btnInit_clicked() 
{ 
    QColor color = Qt::red; 
    QBrush brush = Qt::SolidPattern; 
    brush.setColor(color); 
    QRect * rectObject = new QRect(QPoint(0,0) , QSize(20,20)); 
    scene.addRect(*rectObject , color, brush); 

    rectObject = new QRect(QPoint(0,30) , QSize(20,20)); 
    color = Qt::green; 
    brush.setColor(color); 
    scene.addRect(*rectObject , color, brush); 

    rectObject = new QRect(QPoint(0,60) , QSize(20,20)); 
    color = Qt::blue; 
    brush.setColor(color); 
    scene.addRect(*rectObject , color, brush); 

    foreach (QGraphicsItem *item,ui->graphicsView->scene()->items()) { 
     item->setFlag(QGraphicsItem::ItemIsMovable , true); 
     item->setFlag(QGraphicsItem::ItemIsSelectable , true); 
    } 
} 

我已經設置ItemIsMovableItemIsSelectable標誌等等物品可能是可選擇的。

現在改變所選項目的顏色。

void MainWindow::on_btnSelectItem_clicked() 
    { 
     foreach (QGraphicsItem *item, ui->graphicsView->scene()->selectedItems()) 
     { 
      QGraphicsRectItem *rect = qgraphicsitem_cast<QGraphicsRectItem *>(item); 
      if (!rect) 
       continue; 

      QBrush br(Qt::SolidPattern); 
      br.setColor(Qt::black); 
      rect->setBrush(br); 
      rect->update(); 
     } 
    } 

我使用QGraphicsRectItem來投射矩形物體,我以前添加到場景中。如果您想了解更多使用qgraphicsitem,請閱讀彈性節點示例。

+0

@Rooter如果你想給我你的電子郵件地址發送整個測試項目 – saeed

+0

@Rooter最好問問一個新的問題調整大小的QGraphicsView – saeed

+0

非常感謝你先生,我會這樣做,謝謝你的郵件: ) – Rooter

相關問題