2017-10-20 16 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に関連しているのですか?

最初にいくつかの初期化のコードを以下に示します。まず、シーンに3つの矩形を追加してフラグを設定します。

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

関連する問題