2

私はメッシュと呼ばれるクラスを持っています。そのオブジェクトを追跡したい。そのため、新しいメッシュが作成されるたびに、信号が必要でした。そして、すっごく追加しました

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);

};
4

1 に答える 1

2

このエラーを生成している行は次のとおりです。

mesh operator=(mesh input);

から派生したクラスは、QObjectコピーコンストラクターを持つことができません。QObjectドキュメントに記載されているように:

コピーコンストラクターまたは代入演算子はありませんQObjectには、コピーコンストラクターも代入演算子もありません。これは仕様によるものです。実際には宣言されていますが、マクロQ_DISABLE_COPY()を使用したプライベートセクションにあります。実際、QObject(直接または間接)から派生したすべてのQtクラスは、このマクロを使用して、コピーコンストラクターと代入演算子をプライベートとして宣言します。その理由は、QtオブジェクトモデルページのIDと値に関する説明にあります。主な結果は、QObject(またはQObjectサブクラス)へのポインターを使用する必要があることです。そうしないと、QObjectサブクラスを値として使用したくなる可能性があります。たとえば、コピーコンストラクタがないと、QObjectのサブクラスをコンテナクラスの1つに格納される値として使用することはできません。ポインタを保存する必要があります。

作成されたオブジェクトを追跡したい場合はmesh、たとえばQList<mesh*>他のクラスの1つから使用できます。オブジェクトが作成されたら、リストなどにプッシュします。

于 2012-02-11T11:47:48.630 に答える