首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QObject::QObject(QObject parent=0)在此上下文中是私有的

QObject::QObject(QObject parent=0)在此上下文中是私有的
EN

Stack Overflow用户
提问于 2012-02-11 17:21:27
回答 1查看 3.1K关注 0票数 2

我有一个名为mesh的类。我想跟踪它的对象。因此,每当创建新的网格时,我都希望有一个信号。所以我已经添加了

代码语言:javascript
复制
class mesh: public QObject

并将所有方法制作为插槽,并向c-tor meshCreated添加信号。但从现在开始,我的痛苦开始了。无论如何,标题中的错误开始出现。即使我注释了所有的行,也就是在代码中的每一行之前添加了//,但它仍然是一样的。我该如何解决这个问题呢?

实际的代码

代码语言:javascript
复制
#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);

};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-11 19:47:49

生成此错误的代码行如下所示:

代码语言:javascript
复制
mesh operator=(mesh input);

不允许从QObject派生的类具有复制构造函数。正如QObject文档所述:

没有复制构造函数或赋值运算符QObject既没有复制构造函数也没有赋值运算符。这是设计好的。实际上,它们是声明的,但是在带有宏Q_DISABLE_COPY()的私有部分中。事实上,所有从QObject (直接或间接)派生的Qt类都使用此宏来声明它们的复制构造函数和赋值操作符是私有的。在Qt对象模型页面上关于身份与价值的讨论中可以找到原因。主要结果是,您应该使用指向QObject (或指向您的QObject子类)的指针,否则您可能会尝试使用QObject子类作为值。例如,如果没有复制构造函数,就不能使用QObject的子类作为要存储在其中一个容器类中的值。您必须存储指针。

如果您想跟踪创建的mesh对象,您可以使用其他类中的QList<mesh*>。一旦创建了对象,就将其推送到列表中,等等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9239097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档