void UBAbstractDrawRuler::create(QGraphicsItem& item)
{
	item.setFlag(QGraphicsItem::ItemIsMovable, true);
    item.setFlag(QGraphicsItem::ItemIsSelectable, true);
    item.setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);

    item.setAcceptsHoverEvents(true);

    mCloseSvgItem = new QGraphicsSvgItem(":/images/closeTool.svg", &item);
    mCloseSvgItem->setVisible(false);
    mCloseSvgItem->setData(UBGraphicsItemData::ItemLayerType, QVariant(UBItemLayerType::Control));
}
Esempio n. 2
0
// draw text
void ScenePainter::drawText(const char * const *strs, double *x, double *y,
                            int n, Qt::Alignment flags, double rot, double hcex,
                            double vcex)
{
  if (indexMode()) {
    QVector<QRectF> rects = textExtents(strs, n, flags);
    for (int i = 0; i < n; i++) {
      QString qstr = QString::fromLocal8Bit(strs[i]);
      QPointF center = rects[i].center();
      double xi = x[i] + center.x();
      double yi = y[i] + center.y();
      drawPoints(&xi, &yi, 1);
    }
    return;
  }
  // FIXME: alignment is ignored -- translate to HTML?
  QTransform posTform = transform();
  QTransform textTform;
  textTform.rotate(-rot);
  textTform.scale(hcex, vcex);
  for (int i = 0; i < n; i++) {
    QString qstr = QString::fromLocal8Bit(strs[i]);
    QGraphicsItem *item = STORE_INDEX(_scene->addText(qstr, _scene->font()));
    item->setFlag(QGraphicsItem::ItemIgnoresTransformations);
    item->setPos(posTform.map(QPointF(x[i], y[i])));
    item->setTransform(textTform);
  }
}
Esempio n. 3
0
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QGraphicsView gv;
    QGraphicsScene *scene = new QGraphicsScene(&gv);
    gv.setScene(scene);
    QGraphicsItem *rect = scene->addRect(0, 0, 200, 200, QPen(Qt::NoPen), QBrush(Qt::yellow));
    rect->setFlag(QGraphicsItem::ItemHasNoContents);
    rect->setFlag(QGraphicsItem::ItemClipsChildrenToShape);

    QGraphicsItem *childRect = scene->addRect(0, 0, 100, 100, QPen(Qt::NoPen), QBrush(Qt::red));
    childRect->setParentItem(rect);
    gv.show();
    MyObject o(rect);
    QMessageBox::information(0, "What you should see",
                             "The red rectangle should toggle visiblity, so you should see it flash on and off");
    return a.exec();
}
Esempio n. 4
0
void ScenePainter::drawCircle(double x, double y, int r) {
  QRectF rect;
  if (indexMode()) {
    float minFloat = std::numeric_limits<float>::min();
    rect = QRectF(0, 0, minFloat, minFloat);
  } else rect = QRectF(-r, -r, 2*r, 2*r);
  QGraphicsItem *item = STORE_INDEX(_scene->addEllipse(rect, pen(), brush()));
  item->setFlag(QGraphicsItem::ItemIgnoresTransformations);
  item->setPos(transform().map(QPointF(x, y)));
}
void CSharedPainterScene::moveItem( boost::shared_ptr<CPaintItem> item, double x, double y  )
{
	if( ! item )
		return;

	if( ! item->drawingObject() )
		return;

	clearLastItemBorderRect();

	QGraphicsItem* i = reinterpret_cast<QGraphicsItem *>(item->drawingObject());

	// freeze move changes notify
	i->setFlag( QGraphicsItem::ItemSendsGeometryChanges, false );

	i->setPos( x, y );
	
	// thaw move changes notify
	i->setFlag( QGraphicsItem::ItemSendsGeometryChanges, true );
	invalidate( i->boundingRect() );
}
Esempio n. 6
0
// draw points (pixels)
void ScenePainter::drawPoints(double *x, double *y, int n) {
  QTransform tform = transform();
  QPen pen = this->pen();
  // seems that 0-size items are ignored, so we use min size
  float minFloat = std::numeric_limits<float>::min();
  QSizeF size = indexMode() ? QSizeF(minFloat, minFloat) : QSizeF(1, 1);
  for (int i = 0; i < n; i++) {
    QRectF rect = QRectF(QPointF(0, 0), size);
    QGraphicsItem *item = STORE_INDEX(_scene->addRect(rect, pen));
    item->setFlag(QGraphicsItem::ItemIgnoresTransformations);
    item->setPos(tform.map(QPointF(x[i], y[i])));
  }
}
Esempio n. 7
0
// drawing glyphs (same path, many places)    
void ScenePainter::drawGlyphs(const QPainterPath &path, double *x, double *y,
                              double *size, QColor *stroke, QColor *fill, int n)
{
  if (indexMode()) {
    drawPoints(x, y, n);
  } else if (!rasterize()) { 
    QTransform tform = transform();
    double curSize = glyphSize();
    for (int i = 0; i < n; i++) {
      if (stroke) setStrokeColor(stroke[i]);
      if (fill) setFillColor(fill[i]);
      QGraphicsItem *item = STORE_INDEX(_scene->addPath(path, pen(), brush()));
      item->setPos(tform.map(QPointF(x[i], y[i])));
      item->setFlag(QGraphicsItem::ItemIgnoresTransformations);
      if (size) curSize = size[i];
      item->scale(curSize, curSize);
    }
  } else QtBasePainter::drawGlyphs(path, x, y, size, stroke, fill, n);
}
Esempio n. 8
0
// image
void ScenePainter::drawImage(const QImage &image, double x, double y,
                             int sx, int sy, int sw, int sh)
{
  if (indexMode()) {
    x = (sw < 0 ? image.width() : sw) / 2.0;
    y = (sh < 0 ? image.height() : sh) / 2.0;
    drawPoints(&x, &y, 1);
    return;
  }
  QImage subImage;
  if (sw >= 0 || sh >= 0 || sx > 0 || sy > 0) {
    sw = sw < 0 ? image.width() : sw;
    sh = sh < 0 ? image.height() : sh;
    subImage = image.copy(sx, sy, sw, sh);
  } else subImage = image;
  QPixmap pixmap = QPixmap::fromImage(subImage);
  QGraphicsItem *item = STORE_INDEX(_scene->addPixmap(pixmap));
  item->setPos(transform().map(QPointF(x, y)));
  item->setFlag(QGraphicsItem::ItemIgnoresTransformations);
}
Esempio n. 9
0
QGraphicsItem *QRecipeTableItem::Clone()
{
    QGraphicsItem *pCopy = NULL;
    QGraphicsItem * pItem= NULL;

    QRecipeTableItem *itemGroup = new QRecipeTableItem();

    QList<QGraphicsItem *> itemList;
    itemList = childItems();
    int size = itemList.size();

    for(int i=0;i<size;i++)
    {
        pItem = itemList.at(i);

        switch(pItem->type())
        {
        case SAM_DRAW_OBJECT_RECT:              //矩形
            {
                QRectItem *rectItem = dynamic_cast<QRectItem *>(pItem);
                if(rectItem)
                {
                    pCopy = rectItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_ELIPSE:              //圆
            {
                QElipseItem *elipseItem = dynamic_cast<QElipseItem *>(pItem);
                if(elipseItem)
                {
                    pCopy = elipseItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_LINE:                 //直线
            {
                QLineItem * lineItem = dynamic_cast<QLineItem *>(pItem);
                if(lineItem)
                {
                    pCopy = lineItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_POLYGON:              //多边形
            {
                QPolygonItem *polygonItem = dynamic_cast<QPolygonItem *>(pItem);
                if(polygonItem)
                {
                    pCopy = polygonItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_FOLDLINE:             //19
            {
                QFoldLineItem *foldlineItem = dynamic_cast<QFoldLineItem *>(pItem);
                if(foldlineItem)
                {
                    pCopy = foldlineItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_FREELINE:             //20
            {
                QFreeLineItem * freelineItem = dynamic_cast<QFreeLineItem *>(pItem);
                if(freelineItem)
                {
                    pCopy = freelineItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_TEXT:                 //22
            {
                QSimpleTextItem * textItem = dynamic_cast<QSimpleTextItem *>(pItem);
                if(textItem)
                {
                    pCopy = textItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_PIXMAP:
            {

                QPixmapItem *pixmapItem = dynamic_cast<QPixmapItem *>(pItem);
                if(pixmapItem)
                {
                    pCopy = pixmapItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_LINECIRCLE:           //25
            {
                QLineCircleItem *circleItem = dynamic_cast<QLineCircleItem *>(pItem);
                if(circleItem)
                {
                    pCopy = circleItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_ROUNDEDRECT:
            {
                QRoundedRect *roundedrectItem = dynamic_cast<QRoundedRect *>(pItem);
                if(roundedrectItem)
                {
                    pCopy = roundedrectItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_ARC:
            {
                QArcItem *arcItem = dynamic_cast<QArcItem *>(pItem);
                if(arcItem)
                {
                    pCopy = arcItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_GROUP:                //23
            {

                QItemGroup *group = dynamic_cast<QItemGroup *>(pItem);
                if(group)
                {
                    pCopy = group->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        default:
            break;
        }
        if(pCopy)
            pCopy->setFlag(QGraphicsItem::ItemIsSelectable,false);

    }

    itemGroup->SaveSecurityPro(&sPro);
    itemGroup->SaveInfo(m_SaveInfo);

    itemGroup->setData(GROUP_NAME_KEY,data(GROUP_NAME_KEY).toString());
    itemGroup->setData(GROUP_TYPE_KEY,data(GROUP_TYPE_KEY).toInt());

    itemGroup->setId(id());

    if(itemGroup->childItems().size() == 0)
    {
        delete itemGroup;
        itemGroup = NULL;
    }
    return itemGroup;
    //return QItemGroup::Clone();
    //return 0;
    //需要在派生类实例化对象,复制部分无法重用基类代码
}
Esempio n. 10
0
//确定按钮的事件
void QMultiCopy::on_OK_clicked()
{
    // QPLC_Struct *PLC_P=NULL;
    QList<QGraphicsItem *> selList=pwnd->pSceneSheet[pwnd->nActiveSheetIndex]->selectedItems();
    if(selList.size()!=1)//选择多个或者没有
    {
        accept();
        return;
    }
    else{
        DrawItemToScene CopyFun;

        int nItemWidth=0;
        int nItemHeight=0;
        if(ui->Overlap->isChecked())
        {
            nItemWidth=0;
            nItemHeight=0;
        }
        else
        {
            nItemWidth=selList.at(0)->boundingRect().width();
            nItemHeight=selList.at(0)->boundingRect().height();
        }
        qreal bottom;//基准控件的底边界值
        qreal right;//基准控件的右边界值
        int nColumn=ui->Column->value();//行数
        int nColumn_Interval=ui->Column_Interval->value();//行间隔
        int nRow=ui->Row->value();//列数
        int nRow_Interval=ui->Row_Interval->value();//列间隔

        qreal scence_h=pwnd->pSceneSheet[pwnd->nActiveSheetIndex]->sceneRect().height();
        qreal scence_w=pwnd->pSceneSheet[pwnd->nActiveSheetIndex]->sceneRect().width();
        QGraphicsItem * pCopyTem = NULL;
        QGraphicsItem * pTem = NULL;
        QList<QGraphicsItem *> addItemsList;
        CopyFun.CopyItem(&pCopyTem,selList.at(0));
        if(R_Alignment_Group->checkedId() == 1)//默认情况下,选中的是向右递增
        {
            for(int j=0;j<nRow;j++)
            {
                for(int i=0;i<nColumn-1;i++)
                {
                    if((pCopyTem->type()==SAM_DRAW_OBJECT_ROUNDEDRECT_NEW)||(pCopyTem->type() ==SAM_DRAW_OBJECT_ARC_NEW))//判断是否为圆角矩形或者扇形
                    {
                        right=pCopyTem->sceneBoundingRect().right();
                    }
                    else
                    {
                        right=pCopyTem->boundingRect().right();
                    }
                    qreal item_x=right+(i+1)*(nColumn_Interval+nItemWidth);//计算边界值是否越界
                    if(item_x>scence_w)//若复制的大小越界的话
                    {//退出循环
                        break;
                    }
                    CopyFun.CopyItem(&pTem,pCopyTem);

                    pwnd->pSceneSheet[pwnd->nActiveSheetIndex]->addItem(pTem);
                    addItemsList.push_back(pTem);
                    if((pCopyTem->type()==SAM_DRAW_OBJECT_ROUNDEDRECT_NEW)||(pCopyTem->type() ==SAM_DRAW_OBJECT_ARC_NEW))//判断是否为圆角矩形或者扇形
                    {
                        pTem->setPos(pTem->sceneBoundingRect().topLeft().x()+(nItemWidth+nColumn_Interval)*(i+1), pTem->sceneBoundingRect().topLeft().y());
                    }
                    else
                    {
                        pTem->setPos((nItemWidth+nColumn_Interval)*(i+1),0);
                    }
                    pTem->setFlag(QGraphicsItemGroup::ItemIsMovable, true);
                    pTem->setFlag(QGraphicsItemGroup::ItemIsSelectable, true);
                    pTem=NULL;
                }
                if(j<nRow-1)
                {
                    qreal item_y;
                    // int hight=pCopyTem->sceneBoundingRect().height();
                    if((pCopyTem->type()==SAM_DRAW_OBJECT_ROUNDEDRECT_NEW)||(pCopyTem->type() ==SAM_DRAW_OBJECT_ARC_NEW))//判断是否为圆角矩形或者扇形
                    {
                        bottom=pCopyTem->sceneBoundingRect().bottom();
                        item_y=bottom+(nRow_Interval+nItemHeight);//计算边界值是否越界
                    }
                    else
                    {
                        bottom=pCopyTem->boundingRect().bottom();
                        item_y=bottom+(nRow_Interval+nItemHeight)*(j+1);//计算边界值是否越界
                    }
                    if(item_y>scence_h)//若复制的大小越界的话
                    {//退出循环
                        break;
                    }
                    CopyFun.CopyItem(&pCopyTem,selList.at(0));

                    //MuCopyList(*pCopyTem,CopyCount,NormKeyboardstr);
                    //pwnd->pSceneSheet[pwnd->nActiveSheetIndex]->setNewItem_ID(pCopyTem,NouseItem );
                    pwnd->pSceneSheet[pwnd->nActiveSheetIndex]->addItem(pCopyTem);
                    addItemsList.push_back(pCopyTem);
                    if((pCopyTem->type()==SAM_DRAW_OBJECT_ROUNDEDRECT_NEW)||(pCopyTem->type() ==SAM_DRAW_OBJECT_ARC_NEW))//判断是否为圆角矩形或者扇形
                    {
                        pCopyTem->setPos(pCopyTem->sceneBoundingRect().topLeft().x(),(nItemHeight+nRow_Interval)*(j+1)+ pCopyTem->sceneBoundingRect().topLeft().y());
                    }
                    else
                    {
                        pCopyTem->setPos(0,(nItemHeight+nRow_Interval)*(j+1));
                    }
                    pCopyTem->setFlag(QGraphicsItemGroup::ItemIsMovable, true);
                    pCopyTem->setFlag(QGraphicsItemGroup::ItemIsSelectable, true);
                    //pwnd->AndTreeSubItem(pCopyTem);
                    //pwnd->upDatetreeScreenItem();//更新画面的子项

                }
            }
        }
        else if(R_Alignment_Group->checkedId() == 2)//选中的是向下递增
        {
            for(int i=0;i<nColumn;i++)
            {
                for(int j=0;j<nRow-1;j++)
                {
                    if((pCopyTem->type()==SAM_DRAW_OBJECT_ROUNDEDRECT_NEW)||(pCopyTem->type() ==SAM_DRAW_OBJECT_ARC_NEW))//判断是否为圆角矩形或者扇形
                    {
                        bottom=pCopyTem->sceneBoundingRect().bottom();
                    }
                    else
                    {
                        bottom=pCopyTem->boundingRect().bottom();
                    }
                    qreal item_y=bottom+(j+1)*(nRow_Interval+nItemHeight);//计算边界值是否越界
                    // 若复制的大小越界的话
                    if(item_y>scence_h) break;

                    CopyFun.CopyItem(&pTem,pCopyTem);

                    pwnd->pSceneSheet[pwnd->nActiveSheetIndex]->addItem(pTem);
                    addItemsList.push_back(pTem);
                    if((pCopyTem->type()==SAM_DRAW_OBJECT_ROUNDEDRECT_NEW)||(pCopyTem->type() ==SAM_DRAW_OBJECT_ARC_NEW))//判断是否为圆角矩形或者扇形
                    {
                        pTem->setPos(pTem->sceneBoundingRect().topLeft().x(),(nItemHeight+nRow_Interval)*(j+1)+ pTem->sceneBoundingRect().topLeft().y());
                    }
                    else
                    {
                        pTem->setPos(0,(nItemHeight+nRow_Interval)*(j+1));
                    }
                    pTem->setFlag(QGraphicsItemGroup::ItemIsMovable, true);
                    pTem->setFlag(QGraphicsItemGroup::ItemIsSelectable, true);
                    pTem=NULL;
                }
                if(i<nColumn-1)
                {
                    qreal item_x;
                    if((pCopyTem->type()==SAM_DRAW_OBJECT_ROUNDEDRECT_NEW)||(pCopyTem->type() ==SAM_DRAW_OBJECT_ARC_NEW))//判断是否为圆角矩形或者扇形
                    {
                        right=pCopyTem->sceneBoundingRect().right();
                        item_x=right+(nColumn_Interval+nItemWidth);//计算边界值是否越界
                    }
                    else
                    {
                        right=pCopyTem->boundingRect().right();
                        item_x=right+(i+1)*(nColumn_Interval+nItemWidth);//计算边界值是否越界
                    }
                    //若复制的大小越界的话
                    if(item_x>scence_w) break;

                    CopyFun.CopyItem(&pCopyTem,selList.at(0));

                    pwnd->pSceneSheet[pwnd->nActiveSheetIndex]->addItem(pCopyTem);
                    addItemsList.push_back(pCopyTem);
                    if((pCopyTem->type()==SAM_DRAW_OBJECT_ROUNDEDRECT_NEW)||(pCopyTem->type() ==SAM_DRAW_OBJECT_ARC_NEW))//判断是否为圆角矩形或者扇形
                    {
                        pCopyTem->setPos(pCopyTem->sceneBoundingRect().topLeft().x()+(nItemWidth+nColumn_Interval)*(i+1), pCopyTem->sceneBoundingRect().topLeft().y());
                    }
                    else
                    {
                        pCopyTem->setPos((nItemWidth+nColumn_Interval)*(i+1),0);
                    }

                    pCopyTem->setFlag(QGraphicsItemGroup::ItemIsMovable, true);
                    pCopyTem->setFlag(QGraphicsItemGroup::ItemIsSelectable, true);
                }
            }
        }
        if(ui->if_Increse_Address->isChecked())
        {
            //设置地址增加
            QList<QGraphicsItem *> itemList = addItemsList;
            qDebug() << "multiCopy size ----"<< itemList.size();

            setMulitAddrs(itemList,selList.at(0));
        }
        pwnd->undoStack->push(new multiCopyCommand(pwnd->pSceneSheet[pwnd->nActiveSheetIndex],addItemsList,selList[0],true));
    }
    pwnd->PreviewWindow();
    accept();
}
Esempio n. 11
0
DynCircleAttr* DynCircleAttr::Clone()         //复制item
{
    QGraphicsItem* pCopy = NULL;
    QGraphicsItem* pItem = NULL;

    DynCircleAttr *itemGroup = new DynCircleAttr;

    QList<QGraphicsItem *> itemList;
    itemList = childItems();
    int size = itemList.size();

    for(int i=0;i<size;i++)
    {
        pItem = itemList.at(i);

        switch(pItem->type())
        {
        case SAM_DRAW_OBJECT_RECT:              //矩形
            {
                QRectItem *rectItem = dynamic_cast<QRectItem *>(pItem);
                if(rectItem)
                {
                    pCopy = rectItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_ELIPSE:              //圆
            {
                QElipseItem *elipseItem = dynamic_cast<QElipseItem *>(pItem);
                if(elipseItem)
                {
                    pCopy = elipseItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_LINE:                 //直线
            {
                QLineItem * lineItem = dynamic_cast<QLineItem *>(pItem);
                if(lineItem)
                {
                    pCopy = lineItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_POLYGON:              //多边形
            {
                QPolygonItem *polygonItem = dynamic_cast<QPolygonItem *>(pItem);
                if(polygonItem)
                {
                    pCopy = polygonItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_FOLDLINE:             //19
            {
                QFoldLineItem *foldlineItem = dynamic_cast<QFoldLineItem *>(pItem);
                if(foldlineItem)
                {
                    pCopy = foldlineItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_FREELINE:             //20
            {
                QFreeLineItem * freelineItem = dynamic_cast<QFreeLineItem *>(pItem);
                if(freelineItem)
                {
                    pCopy = freelineItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_TEXT:                 //22
            {
                QSimpleTextItem * textItem = dynamic_cast<QSimpleTextItem *>(pItem);
                if(textItem)
                {
                    pCopy = textItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_PIXMAP:
            {

                QPixmapItem *pixmapItem = dynamic_cast<QPixmapItem *>(pItem);
                if(pixmapItem)
                {
                    pCopy = pixmapItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_LINECIRCLE:           //25
            {
                QLineCircleItem *circleItem = dynamic_cast<QLineCircleItem *>(pItem);
                if(circleItem)
                {
                    pCopy = circleItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_ROUNDEDRECT:
            {
                QRoundedRect *roundedrectItem = dynamic_cast<QRoundedRect *>(pItem);
                if(roundedrectItem)
                {
                    pCopy = roundedrectItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_ARC:
            {
                QArcItem *arcItem = dynamic_cast<QArcItem *>(pItem);
                if(arcItem)
                {
                    pCopy = arcItem->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        case SAM_DRAW_OBJECT_GROUP:                //23
            {

                QItemGroup *group = dynamic_cast<QItemGroup *>(pItem);
                if(group)
                {
                    pCopy = group->Clone();
                    itemGroup->addToGroup(pCopy);
                }
                break;
            }
        default:
            break;
        }
        if(pCopy)
        {
            pCopy->setFlag(QGraphicsItem::ItemIsSelectable,false);
        }
    }

    itemGroup->setData(GROUP_NAME_KEY,data(GROUP_NAME_KEY).toString());
    if(itemGroup->childItems().size() == 0)
    {
        delete itemGroup;
        itemGroup = NULL;
    }

    itemGroup->SaveSecurityPro(&sPro);

    //矩形外观
    itemGroup->m_bFillColor     = m_bFillColor;
    itemGroup->m_nFillColor     = m_nFillColor;
    itemGroup->m_bFrameColor    = m_bFrameColor;
    itemGroup->m_nFrameColor    = m_nFrameColor;
    itemGroup->m_nFrameWidth    = m_nFrameWidth;
    itemGroup->m_nAlpha         = m_nAlpha;
    //显示区域设置
    itemGroup->m_nBeginX        = m_nBeginX;
    itemGroup->m_nBeginY        = m_nBeginY;
    itemGroup->m_nWidth         = m_nWidth;
    itemGroup->m_nHeight        = m_nHeight;
    itemGroup->m_nBgColor       = m_nBgColor;
    //位置控制
    itemGroup->m_bPosCtrl       = m_bPosCtrl;
    itemGroup->m_addrH          = m_addrH;
    itemGroup->m_addrV          = m_addrV;
    //大小控制
    itemGroup->m_bSizeCtrl      = m_bSizeCtrl;
    itemGroup->m_addrCircle     = m_addrCircle;
    itemGroup->setId(id());

    return itemGroup;
}
dmz::QtCanvasObjectGroup *
dmz::QtPluginCanvasObjectBasic::_create_item (
      ObjectStruct &os,
      QGraphicsItem *parent,
      const Config &ItemList,
      HashTableStringTemplate<String> &table) {

   QtCanvasObjectGroup *group (0);

   if (parent) {

      group = new QtCanvasObjectGroup (parent);

      QGraphicsItem *item (0);

      ConfigIterator it;
      Config cd;
      Float32 z (1.0);

      while (ItemList.get_next_config (it, cd)) {

         const String DataName (cd.get_name ().to_lower ());
         const String ItemName (config_to_string ("name", cd));
         const Boolean Isect (config_to_boolean ("isect", cd, True));

         if (DataName == "image") {

            item = _create_image_item (os, group, cd, table);

            if (Isect) {

               item->setData (QtCanvasObjectHandleIndex, (quint64)os.ObjHandle);
            }
         }
         else if (DataName == "text") {

            item =  _create_text_item (os, group, cd);

            if (Isect) {

               item->setData (QtCanvasObjectHandleIndex, (quint64)os.ObjHandle);
            }
         }
         else if (DataName == "group") {

            item = _create_item (os, group, cd, table);
         }

         if (item) {

            item->setFlag (QGraphicsItem::ItemIgnoresParentOpacity, true);
            item->setFlag (QGraphicsItem::ItemDoesntPropagateOpacityToChildren, true);

            item->setZValue (z++);

            if (ItemName) {

               String name (ItemName);
               name << "." << os.ObjHandle;

               item->setData (QtCanvasObjectNameIndex, name.get_buffer ());

               os.itemTable.store (ItemName, item);
            }
         }
      }
   }

   return group;
}