1

実装時にこのエラーが発生しますQAbstractListModel

./debug\moc_ObjectModel.o:moc_ObjectModel.cpp:(.rdata$_ZTV12ObjectModel[__ZTV12ObjectModel]+0x38): undefined reference to `QAbstractListModel::position(int, int, QModelIndex const&) const'
collect2.exe: error: ld returned 1 exit status

モデルに挿入および削除メソッドを追加する前に、プロジェクトのビルドは成功しました。

まず、insert メソッドと remove メソッドを追加しましたが、begin* メソッドと end* メソッドを呼び出すのを忘れていたため、プロジェクトの再構築時にエラーが発生しました。

その後、ドキュメントに記載されているように begin* と end* を追加します。しかし、プロジェクトをビルドすると、上記のエラーが発生します。次に、挿入および削除メソッドを削除しましたが、エラーは引き続き発生します。

プロジェクトのビルド ディレクトリを削除し、クリーンアップしてから qmake を実行し、プロジェクトをビルドしようとしましたが、うまくいきませんでした。

ObjectModel.h

#ifndef OBJECTMODEL_H
#define OBJECTMODEL_H

#include "ProjectCoreGlobal.h"
#include "Data/MyObject.h"

#include <QAbstractListModel>

class PROJECTCORESHARED_EXPORT ObjectModel : public QAbstractListModel
{
    Q_OBJECT

public:
    explicit ObjectModel(QObject *parent = 0);

    int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
    QVariant data(const QModelIndex &position, int role) const Q_DECL_OVERRIDE;

    // void insertObject(MyObject *object);
    // void removeObject(int position);

    MyObjectList objects() const;

    MyObject *objectById(const int &id);
    MyObject *objectByName(const QString &name);

private:
    MyObjectList mObjects;
};

#endif // OBJECTMODEL_H

ObjectModel.cpp

#include "ObjectModel.h"

ObjectModel::ObjectModel(QObject *parent) :
    QAbstractListModel(parent)
{
}

int ObjectModel::rowCount(const QModelIndex &parent) const
{
    if (parent.isValid())
        return 0;
    else
        return mObjects.size();
}

QVariant ObjectModel::data(const QModelIndex &index, int role) const
{
    if (!index.isValid())
        return QVariant();

    MyObject *obj = mObjects.at(index.row());

    if (role == Qt::DisplayRole) {
        return obj->name();
    }

    return QVariant();
}

// void ObjectModel::insertObject(MyObject *object)
// {
//    beginInsertRows(QModelIndex(), mObjects.count(), mObjects.count());
//    mObjects.append(object);
//    endInsertRows();
// }

// void ObjectModel::removeObject(int position)
// {
//     beginRemoveRows(QModelIndex(), position, position);
//     mObjects.removeAt(position);
//     endRemoveRows();
// }

MyObjectList ObjectModel::objects() const
{
    return mObjects;
}

MyObject *ObjectModel::objectById(const int &id)
{
    foreach (MyObject *obj, mObjects)
    {
        if (obj->id() == id)
        {
            return obj;
        }
    }

    return NULL;
}

MyObject *ObjectModel::objectByNme(const QString &name)
{
    foreach (MyObject *obj, mObjects)
    {
        if (obj->name() == name)
        {
            return object;
        }
    }

    return NULL;
}
4

1 に答える 1

1

QAbstractListModelエラー メッセージの署名と一致する唯一のクラス メンバは ですQAbstractListModel::index

#define index positionこれは、2 つのヘッダー ファイルまたはプロジェクト設定 ( DEFINES += index=position.pro ファイル) のいずれかに、そのクラスのインクルードの前にどこかにがあることを最も確実に意味します。

#include <QAbstractListModel>最初に ObjectModel.hを入れてみてください。

QAbstractListModelクラスの Qt ヘッダー ファイルが間違ったウィンドウでの検索/置換によって誤って変更されていないことも確認する必要があります (元のクラスと比較してください ここ)。

于 2015-06-03T01:58:06.840 に答える