在Qt中复制时出错
我试图在qraphicsView中的qt中对所有项目(如点、圆、线、椭圆等)执行复制和粘贴操作,但出现错误:在Qt中复制时出错,qt,Qt,我试图在qraphicsView中的qt中对所有项目(如点、圆、线、椭圆等)执行复制和粘贴操作,但出现错误: 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 'Ca
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)"
我在CadGraphicscene中的代码是:
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;
}
void cadgraphicscene::contextMenuEvent(qgraphicscenecontextmenuevent*evt)
{
QList itemsAt=items(evt->scenePos());
QGraphicsItem*item=itemsAt.isEmpty()?0x00:itemsAt.first();
静态QGraphicsItem*storedItem=0x00;
QMenu菜单;
如果(项目)
{
菜单。添加操作(“复制”);
菜单。添加操作(“剪切”);
}
如果(storedItem)
{
menu.addAction(“粘贴”);
}
QAction*action=menu.exec(evt->screenPos());
如果(操作!=0x00)
{
如果(操作->文本()=“复制”)
{
如果(storedItem)
删除storedItem;
storedItem=createCopy(项目);
}
否则如果(操作->文本()=“剪切”)
{
如果(storedItem)
删除storedItem;
storedItem=项目;
移除项目(项目);
}
否则如果(操作->文本()=“粘贴”)
{
QGraphicsItem*item=createCopy(storedItem);
如果(项目){
增编(项目);
项目->设置位置(evt->scenePos());
}
}
}
}
QGraphicsSitem*CadGraphicscene::createCopy(QGraphicsSitem*项)
{
如果(项==0x00)
返回0x00;
如果(item->type()==Point::type)//PointItem
{
点*项=(点*)项;
点*复制=新点(项->父项());
复制->setRect(rectItem->rect());
复制->设置笔(rectItem->笔());
复制->收进(矩形项->画笔());
返回副本;
}
如果(item->type()==Line::type)//LineItem
{
行*项=(行*)项;
行*复制=新行(项->父项());
复制->setRect(rectItem->rect());
复制->设置笔(rectItem->笔());
复制->收进(矩形项->画笔());
返回副本;
}
if(item->type()==Circle::type)//CircleItem
{
圆圈*矩形项=(圆圈*)项;
循环*复制=新循环(项目->父项目());
复制->setRect(rectItem->rect());
复制->设置笔(rectItem->笔());
复制->收进(矩形项->画笔());
返回副本;
}
如果(项->类型()==EllipseItem::type)//EllipseItem
{
椭圆*矩形项=(椭圆*)项;
椭圆*复制=新椭圆(项->父项());
复制->setRect(rectItem->rect());
复制->设置笔(rectItem->笔());
复制->收进(矩形项->画笔());
返回副本;
}
如果(item->type()==mText::type)//TextItem
{
多行文字*矩形项=(多行文字*)项;
多行文字*复制=新多行文字(项目->父项目());
复制->setRect(rectItem->rect());
复制->设置笔(rectItem->笔());
复制->收进(矩形项->画笔());
返回副本;
}
返回0x00;
}
和CadScene.h是:
#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
\ifndef cadgraphicscene\u H
#定义CadGraphicscene_H
#包括
#包括
#包括
#包括
#包括
#包括“cadcommandadd.h”
#包括“cadcommanddelete.h”
#包括“cadcommandmove.h”
类别CadGraphicscene:公共QGraphicscene
{
Q_对象
公众:
显式CadGraphicscene(QObject*父对象,QUndoStack*);
枚举模式{NoMode,PointMode,LineMode,CircleMode,EllipseMode,TextMode};
QFont font()常量
{
返回myFont;
}
QColor textColor()常量
{
返回myTextColor;
}
void setTextColor(常量QColor和color);
void setFont(const QFont&font);
作废删除项目();
void writeStream(QXmlStreamWriter*流);
void readStream(QXmlStreamReader*流);
公众时段:
无效设置模式(模式);
void selectItems();
无效编辑器关闭焦点(多行文字*项);
受保护的:
无效contextMenuEvent(QGraphicsContextMenuEvent*evt);
void mousePressEvent(QGraphicsSceneMouseEvent*mouseEvent);
无效mouseReleaseEvent(QGraphicsSceneMouseEvent*mouseEvent);
void setFlags();
无效项可选择(bool);
无效dragEnterEvent(QDragEnterEvent*事件);
作废事件(QDropEvent*事件);
作废鼠标压力事件(QMouseEvent*事件);
作废createCopy(QGraphicsItem*项);
信号:
插入的无效文本(QGraphicsTextItem*项);
已选择无效项(QGraphicsItem*项);
私人:
模式实体模式;
昆多斯塔克*蒙多斯塔克;
boolmfirstclick;
bool-mSecondClick;
bool-mThirdClick;
布尔姆帕因特旗;
矢量材料;
Q点开始、中间、结束、移动、检查;
QPen画笔、线条笔;
QList项目列表;
点*点项目;
行*行项目;
圆圈*圆圈;
椭圆*ellipseItem;
多行文字*文本项目;
QColor myTextColor;
QFont myFont;
typedef QPair itemPos;
QList-selectedItems;
私人:
行动*行动;
行动*模仿;
};
#endif//cadgraphicscene_H
请帮我找到这个。您有不匹配的原型。在标题中返回
void
,但在源代码中返回QGraphicsItem*
。这也是编译器试图编写的内容
镉烯
Cadscene.cpp
解决方案是将标题中的签名更改为:
Cadscene.h(固定)
您在头中返回void,因此签名与源文件中的签名不匹配。
void createCopy(QGraphicsItem* item);
QGraphicsItem* CadGraphicsScene::createCopy(QGraphicsItem* item)
QGraphicsItem* createCopy(QGraphicsItem* item);