如何更改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);
}
}
答案 0 :(得分:2)
首先,我建议您仔细阅读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
的更多信息,请阅读Elastic Nodes示例。