首先我建议你仔细阅读QGraphicsView的例子和文档,我推荐Diagram Scene Example和Elastic 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);
}
}
我设置了ItemIsMovable 和ItemIsSelectable 标志,以便可以选择项目。
现在更改所选项目的颜色。
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 的信息,请阅读弹性节点示例。