【问题标题】:How can I change the QGraphicView selected Item color如何更改 QGraphicsView 选定的项目颜色
【发布时间】:2018-04-01 11:09:57
【问题描述】:

如何更改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);
    }
}

【问题讨论】:

    标签: c++ qt colors


    【解决方案1】:

    首先我建议你仔细阅读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 的信息,请阅读弹性节点示例。

    【讨论】:

    • @Rooter 如果您想提供您的电子邮件地址以发送整个测试项目
    • @Rooter QGraphicsView的resize问题最好问个新问题
    • 非常感谢您,先生,我会这样做的,谢谢您的邮件:)
    • 我将它作为一个新问题发布,先生,stackoverflow.com/questions/46864465/…
    猜你喜欢
    • 2015-12-06
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2017-03-13
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多