user3859872
user3859872

Reputation: 927

Error while copying in Qt

I was try to implement copy and paste operation in qt in qraphicsView on all the items like point, circle, line, ellipse etc. but getting error:

 error: void value not ignored as it ought to be storedItem = createCopy(item);
 error: prototype for 'QGraphicsItem* CadGraphicsScene::createCopy(QGraphicsItem*)' does not match any in class 'CadGraphicsScene'"QGraphicsItem* CadGraphicsScene::createCopy(QGraphicsItem* item)"

My code in CadGraphicsScene is:

    void CadGraphicsScene::contextMenuEvent(QGraphicsSceneContextMenuEvent* evt)
    {
        QList<QGraphicsItem*> itemsAt = items(evt->scenePos());
        QGraphicsItem* item = itemsAt.isEmpty() ? 0x00 : itemsAt.first();
        static QGraphicsItem* storedItem = 0x00;
        QMenu menu;
        if(item)
            {
                menu.addAction("Copy");
                menu.addAction("Cut");
            }

        if(storedItem)
           {
               menu.addAction("Paste");
           }

         QAction* action = menu.exec(evt->screenPos());
         if(action != 0x00)
             {
             if(action->text() == "Copy")
                     {
                 if(storedItem)
                                 delete storedItem;
                             storedItem = createCopy(item);
             }
                    else if(action->text() == "Cut")
                    {
                        if(storedItem)
                            delete storedItem;
                        storedItem = item;
                        removeItem(item);
                    }
                    else if(action->text() == "Paste")
                    {
                        QGraphicsItem* item = createCopy(storedItem);
                        if(item) {
                            addItem(item);
                            item->setPos(evt->scenePos());
                        }
                    }
                }
             }
QGraphicsItem* CadGraphicsScene::createCopy(QGraphicsItem* item)
{
    if(item == 0x00)
        return 0x00;

    if(item->type() == Point::Type) //PointItem
    {
        Point* rectItem = (Point*)item;
        Point* copy = new Point(item->parentItem());
        copy->setRect(rectItem->rect());
        copy->setPen(rectItem->pen());
        copy->setBrush(rectItem->brush());
        return copy;
    }

    if(item->type() == Line::Type) //LineItem
    {
        Line* rectItem = (Line*)item;
        Line* copy = new Line(item->parentItem());
        copy->setRect(rectItem->rect());
        copy->setPen(rectItem->pen());
        copy->setBrush(rectItem->brush());
        return copy;
    }

    if(item->type() == Circle::Type) //CircleItem
    {
        Circle* rectItem = (Circle*)item;
        Circle* copy = new Circle(item->parentItem());
        copy->setRect(rectItem->rect());
        copy->setPen(rectItem->pen());
        copy->setBrush(rectItem->brush());
        return copy;
    }

    if(item->type() == Ellipse::Type) //EllipseItem
    {
        Ellipse* rectItem = (Ellipse*)item;
        Ellipse* copy = new Ellipse(item->parentItem());
        copy->setRect(rectItem->rect());
        copy->setPen(rectItem->pen());
        copy->setBrush(rectItem->brush());
        return copy;
    }

    if(item->type() == mText::Type) //TextItem
    {
        mText* rectItem = (mText*)item;
        mText* copy = new mText(item->parentItem());
        copy->setRect(rectItem->rect());
        copy->setPen(rectItem->pen());
        copy->setBrush(rectItem->brush());
        return copy;
    }

    return 0x00;
}

And CadGraphicsScene.h is:

#ifndef CADGRAPHICSSCENE_H
#define CADGRAPHICSSCENE_H

#include <QGraphicsScene>
#include <QXmlStreamWriter>
#include <QUndoStack>
#include <QLabel>
#include <QFrame>

#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 writeStream(QXmlStreamWriter *stream);
    void readStream(QXmlStreamReader *stream);


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


protected:
     void contextMenuEvent(QGraphicsSceneContextMenuEvent* evt);
    void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent);
    void mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent);
    void setFlags();
    void areItemsSelectable(bool);
    void dragEnterEvent(QDragEnterEvent *event);
    void dropEvent(QDropEvent *event);
    void mousePressEvent(QMouseEvent *event);
    void createCopy(QGraphicsItem* item);
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;
private:
    QAction *cutAct;
    QAction *copyAct;

};

#endif // CADGRAPHICSSCENE_H

Please hep me out to sought this.

Upvotes: 1

Views: 78

Answers (1)

L&#225;szl&#243; Papp
L&#225;szl&#243; Papp

Reputation: 53165

You have mismatching prototypes. You return void in the header, but QGraphicsItem* in the source. This is also what the compiler is trying to write.

CadGraphicsScene.h

void createCopy(QGraphicsItem* item);

CadGraphicsScene.cpp

QGraphicsItem* CadGraphicsScene::createCopy(QGraphicsItem* item)

The solution is to change the signature in the header to:

CadGraphicsScene.h (fixed)

QGraphicsItem* createCopy(QGraphicsItem* item);

Upvotes: 1

Related Questions