【问题标题】:Qt -- How to set a QBrush for a QGraphicsItemGroup?Qt -- 如何为 QGraphicsItemGroup 设置 QBrush?
【发布时间】:2015-10-17 18:52:22
【问题描述】:

我正在尝试在 Qt 上为自己创建一个界面,我需要在 DICOM 图像(磁共振图像)上添加一些矩形,因此它们需要是黑色以外的其他颜色,但我找不到方法为我用来保持矩形组织的 QGraphicsItemGroup 设置画笔。

QGraphicsScene 让我可以添加一个与 QBrush 单独关联的 QRect

QgraphicsScene *scene = new QGraphicsScene();
QRectF rect = QRectF(QPoint(1,2),QPoint(3,4));
scene->addRect(rect, QBrush(Qt::red)); // using red as example

但是单独添加每个矩形会使它变得太混乱并且可能会变慢。我需要一种方法为矩形设置 QBrush,但使用 QGraphicsItemGroup 添加到 QGraphicsScene。

【问题讨论】:

  • 您可以使用 QGraphicsPathItem 并在其中添加任意数量的矩形。

标签: c++ qt qgraphicsscene


【解决方案1】:

为什么不能重新实现QGraphicsItemGroup,里面有一个函数叫做:

void ReimplementedQGraphicsItemGroup::SetRectangleBrush(const QBrush& brush)

并在该函数内部迭代您添加到设置画笔的组中的每个矩形

QgraphicsScene *scene = new QGraphicsScene();
ReimplementedQGraphicsItemGroup ReimplGraphicsGroup = new ReimplementedQGraphicsItemGroup()

// First rect
QGraphicsRectItem rect(1,2,3,4);
rect.setBrush(QColor(Qt::red);
ReimplGraphicsGroup->AddRectangle(rect);

// Second rect
QGraphicsRectItem rect2(5,6,7,8);
rect2.setBrush(QColor(Qt::blue);
ReimplGraphicsGroup->AddRectangle(rect2);

// add reimplemented graphics item group to scene
scene->addItem(ReimplGraphicsGroup);

void ReimplementedQGraphicsItemGroup::SetRectangleBrush(const QBrush& brush)
{
    foreach (QGraphicsRectItem rect, m_ListRects)
    { 
        rect.setBrush(brush);
    }
}

class ReimplementedQGraphicsItemGroup : public QGraphicsItemGroup {
    // a member of ReimplementedQGraphicsItemGroup
    QList<QGraphicsRectItem> m_ListRects;
}



void ReimplementedQGraphicsItemGroup::AddRectangle(QGraphicsRectItem rect)
{
    addToGroup(rect);
    m_ListRects.append(rect);
}

【讨论】:

    猜你喜欢
    • 2014-10-20
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    相关资源
    最近更新 更多