如何更改QGraphicView选择的项目颜色

时间:2017-10-20 09:41:26

标签: c++ qt colors

如何更改QGraphicView所选项目颜色。此代码可以选择QGraphicView项目并删除,也可以禁用项目移动。如何更改所选项目的颜色。< / p>

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 个答案:

答案 0 :(得分:2)

首先,我建议您仔细阅读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的更多信息,请阅读Elastic Nodes示例。