我有一个名为mesh的类。我想跟踪它的对象。所以当一个新的 网格创建,我想要一个信号。而且我已经添加了
class mesh: public QObject
并将所有方法设为槽,并向c-tor meshCreated添加信号。但来自
在这里,我多年的痛苦已经开始了。无论怎样,标题中的错误都开始了
出现。甚至以为我评论了所有行,即在每一行之前添加了//
在代码中,它仍然说同样的。我该如何解决这个问题?
实际代码
#ifndef mesh_H
#define mesh_H
#include <QObject>
#include "mvert.h"
#include "medge.h"
#include "mface.h"
#include <QList>
#include <QString>
#include <QDebug>
#include "glmaterial.h"
class mesh : public QObject
{
Q_OBJECT
public:
explicit mesh(QObject *parent = 0);
QString getName();
private:
QString Name;
GLMaterial material;
QList<MVert> VertList;
QList<MEdge> EdgeList;
QList<MFace> FaceList;
MVert Centroid;
QList<int> QFaces;
QList<int> TFaces;
public slots:
void setName(QString Name);
void ReadmeshData(QString meshsrc);
void displayVerts();
void displayEdges();
void displayFaces();
void addVert(MVert vert);
void addEdge(MEdge edge);
void addFace(MFace face);
void removeDoubles();
MVert generateCentroid();
//FIXUS
void sortQandT();
void reorderFaces();
void subDivFace(int index, int res);
void forcedTriangulate();
//FIXUS
bool isVertInEdge(MVert input, MEdge edg);
bool similarVerts(int i,int j);
QList<int> relatedFacesToVert(MVert input);
QList<int> relatedEdgesToVert(MVert input);
QList<int> relatedVertsToVert(MVert input);
QList<int> relatedFacesToEdge(MEdge input);
QList<int> relatedEdgesToEdge(MEdge input);
QList<int> relatedEdgesToFace(MFace input);
QList<int> relatedFacesToFace(MFace input);
QList<MVert> reducedVList();
QList<MVert> vlistInstance();
MVert midPointOfEdge(int i);
MVert centroidOfFace(int i);
mesh operator=(mesh input);
void GLdraw();
signals:
void meshCreated(mesh *mesh);
};
答案 0 :(得分:2)
产生此错误的行是这一行:
mesh operator=(mesh input);
不允许从QObject
派生的类具有复制构造函数。正如QObject
文档所述:
没有复制构造函数或赋值运算符 QObject既没有复制构造函数也没有赋值运算符。这是设计的。实际上,它们是声明的,但是在具有宏Q_DISABLE_COPY()的私有部分中。实际上,从QObject(直接或间接)派生的所有Qt类都使用此宏来声明其复制构造函数和赋值运算符是私有的。推理可以在Qt对象模型页面上关于Identity vs Value的讨论中找到。 主要结果是你应该使用指向QObject(或你的QObject子类)的指针,否则你可能会试图将QObject子类用作值。例如,如果没有复制构造函数,则不能使用QObject的子类作为要存储在其中一个容器类中的值。你必须存储指针。
如果要跟踪创建的mesh
对象,可以使用其他类中的QList<mesh*>
。创建对象后,将其推送到列表等。