在QGraphicsView中粘贴操作

时间:2014-10-29 08:12:28

标签: qt

我正在将QGraphicsView中的复制粘贴操作实现到圆形,点,椭圆等不同的实体。应用复制操作但无法获得如何应用粘贴操作。请帮我解决问题。我的复制插槽如下:

cadgraphicsscene.cpp

void CadGraphicsScene::copy()
{
   selectItems();

}



void CadGraphicsScene::selectItems()
{
    // refresh record of selected items and their starting positions
    selectedItems.clear();
    foreach (QGraphicsItem *item, itemList)
    {
        if (item->isSelected())
        {
            if (dynamic_cast<QGraphicsItem *>(item))
            {
                selectedItems.append(qMakePair(
                                          dynamic_cast<QGraphicsItem *>(item),
                                          item->scenePos()));
            }
        }
    }
}

cadgraphicsscene.h

#ifndef CADGRAPHICSSCENE_H
#define CADGRAPHICSSCENE_H

#include <QGraphicsScene>
#include <QXmlStreamWriter>
#include <QUndoStack>

#include "cadcommandadd.h"
#include "cadcommanddelete.h"
#include "cadcommandmove.h"

class CadGraphicsScene : public QGraphicsScene
{
    Q_OBJECT
public:
    explicit CadGraphicsScene(QObject *parent, QUndoStack *);
    enum Mode { NoMode, PointMode, LineMode, CircleMode, EllipseMode, TextMode };

    QFont font() const
    {
        return myFont;
    }

    QColor textColor() const
    {
        return myTextColor;
    }

    void setTextColor(const QColor &color);
    void setFont(const QFont &font);
    void deleteItems();
    void copy();
    void writeStream(QXmlStreamWriter *stream);
    void readStream(QXmlStreamReader *stream);

public slots:
    void setMode(Mode mode);
    void selectItems();
    void editorLostFocus(mText *item);

protected:
    void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent);
    void setFlags();
    void areItemsSelectable(bool);

signals:
    void textInserted(QGraphicsTextItem *item);
    void itemSelected(QGraphicsItem *item);

private:
    Mode entityMode;
    QUndoStack *mUndoStack;

    bool mFirstClick;
    bool mSecondClick;
    bool mThirdClick;
    bool mPaintFlag;
    QVector<QPointF> stuff;
    QPointF start_p, mid_p, end_p, move_p, check_p;
    QPen paintpen, linePen;

    QList<QGraphicsItem *> itemList;
    Point *pointItem;
    Line *lineItem;
    Circle *circleItem;
    Ellipse *ellipseItem;
    mText *textItem;
    QColor myTextColor;
    QFont myFont;

    typedef QPair<QGraphicsItem *, QPointF> itemPos;
    QList<itemPos> selectedItems;
};

#endif // CADGRAPHICSSCENE_H

0 个答案:

没有答案