2017-10-20 15 views
1

Comment puis-je changer QGraphicView couleur de l'article sélectionné.Dans ce code qui peut sélectionner des éléments forme QGraphicView et supprimer et aussi en mesure de désactiver le déplacement de l'élément.Comment puis-je changer la couleur de l'élément sélectionné.Comment puis-je changer le QGraphicView sélectionné couleur de l'article

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

Répondre

1

Au début, je vous suggère de lire QGraphicsView exemples et documents attentivement, je recommande comme point de départ Diagram Scene Example et Elastic Nodes Example. Parce que le travail de cadre QGraphicsView est intelligent si vous l'utilisez intelligemment sinon vous pouvez payer des pénalités en performance.

Et maintenant votre question:

toute réponse

est liée à qgraphicsitem_cast, comment l'utiliser? Tout d'abord, permettez-moi de fournir quelques initialisations regardez le code ci-dessous au début, je ajoute trois rectangles à la scène et de définir leurs drapeaux.

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

J'ai mis ItemIsMovable et ItemIsSelectable drapeaux ainsi pour les articles peuvent être sélectionnés.

et maintenant changer la couleur de l'élément sélectionné.

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

J'utilise QGraphicsRectItem pour lancer des objets rectangulaires i ajoutés à la scène avant. Si vous voulez en savoir plus sur l'utilisation qgraphicsitem lisez Exemple de nœuds élastiques.

+0

@Rooter si vous voulez me fournir votre adresse e-mail pour envoyer le projet de test complet – saeed

+0

@Rooter Il est préférable de poser une nouvelle question pour le redimensionnement de QGraphicsView – saeed

+0

Merci beaucoup monsieur, je le ferai, merci pour votre mail:) – Rooter