سؤال

هنا مشكلة أخرى مع qt:أعرب QAbstractTableModel ، ولكن يمكنني الحصول على تجميع خطأ ( أنا باستخدام cmake)

// file.h
#ifndef TABLEMODEL_H
#define TABLEMODEL_H

#include <QAbstractTableModel>

class TableModel : public QAbstractTableModel
{
Q_OBJECT

public:
TableModel(QObject *parent = 0);
int rowCount(const QModelIndex &parent = QModelIndex()) const;
int columnCount(const QModelIndex &parent = QModelIndex()) const;
};
#endif

// file.c
#include "tableModel.h"

TableModel::TableModel(QObject *parent)
: QAbstractTableModel(parent){}
int TableModel::rowCount(const QModelIndex & ) const
{ return 1; }

int TableModel::columnCount(const QModelIndex & ) const
{ return 1;}

عند ترجمة أحصل على:

في وظيفة TableModel': /partd/unusedsvn/unusedpkg/iface/tableModel.cpp:4: undefined reference tovtable على TableModel' /partd/unusedsvn/unusedpkg/iface/tableModel.cpp:4:الإشارة إلى معرف vtable for TableModel' collect2: ld returned 1 exit status

هل من احد لديه نفس المشكلة??

هل كانت مفيدة؟

المحلول 2

وحلها مشيرا إلى CMakeLists.txt ملف حزب الشعب الكمبودي الحاجة.

set(tutorial_SRCS app.cpp mainWin.cpp tableModel.cpp)

وعندما كنت سوف تعمل cmake وزارة التجارة سيتم خلق * تلقائيا

نصائح أخرى

تأكد من أنك تقوم بتشغيل رأس من خلال وزارة التجارة، وربط تلك الملفات الكائن وزارة التجارة.

وهي سبب ما يقرب من 100٪ في المئة من أخطاء vtable إما مفقودة رؤوس تعريفات فئة / أو typoes في تلك التعاريف، وبالتالي فإن أول شيء فعله هو التأكد من أنك حصلت على رؤوس ومصادر الحق (والمدرجة في المشروع). لقد لعن شخصيا كيو تي إلى أدنى الجحيم لذلك وغاب عن ذلك الخطأ المطبعي صغير في ملف مشروع، وليس متعة:)

نعم vtable الأخطاء هي عاهرة.
عليك أن تنفيذ الكود() الأسلوب وهو أسلوب ظاهري أيضا.

من QAbstractTableModel الوثائق :

Subclassing
عندما subclassing QAbstractTableModel يجب تطبيق rowCount(), columnCount(), البيانات().

أنا أعاني vtable المشكلة أيضا وأنا تنفيذ البيانات(), لذلك أنا في عداد المفقودين الظاهرية الأخرى حماقة ولكن أنا لا أعرف whitch واحد.

وهذا خطأ شائع الى حد كبير عندما يكون ليس وزارة التجارة " إد. فما استقاموا لكم فاستقيموا قراءة لتنقذ نفسك بعض الوقت على الطريق .

ولحل هذه المشكلة، لقد إزالة Q_OBJECT من TableModel، جعلت TableModelController الطبقة الجديدة، التي تستمد من QObject ويكون TableModel داخل

class TableModel : public QAbstractTableModel
{
public:
    TableModel(QObject *parent = 0);
    // Some overrided functions
    int rowCount(const QModelIndex &parent = QModelIndex()) const override;
    int columnCount(const QModelIndex &parent = QModelIndex()) const override;
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
};

class TableModelController : public QObject
{
Q_OBJECT
public:
    explicit TableModelController(QObject *parent = nullptr);
    TableModelController(TableModel *m, QObject *parent = nullptr);

    TableModel *getModel() {
        return model;
    }

public slots:
    void addRow();
    void deleteRows();
private:
    TableModel *model;
};

وبعد ذلك يمكنني استخدام TableModelController للوصول TableModel رمي الحصول Methond وفتحات العامة. أنا استخدام QtCreator

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top