Frage

Hier ist ein weiteres Problem mit qt: Ich erweitere eine QAbstractTableModel, aber ich erhalte eine Compilierung Fehler (ich verwende 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;}

, wenn ich kompilieren, erhalte ich:

In Funktion TableModel': /partd/unusedsvn/unusedpkg/iface/tableModel.cpp:4: undefined reference tovtable für Tablemodel‘ /partd/unusedsvn/unusedpkg/iface/tableModel.cpp:4: undefined Verweis auf vtable for TableModel' collect2: ld returned 1 exit status

hat jemand hätte das gleiche Problem ??

War es hilfreich?

Lösung 2

Hinzufügen Gelöst die benötigte CPP-Datei CMakeLists.txt.

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

Wenn ich Cmake laufen werde, die moc * wird automatisch erstellt

Andere Tipps

Stellen Sie sicher, dass Sie Ihren Kopf durch MOC laufen lassen, und verknüpfen diese MOC-Objektdateien.

Fast 100% Prozent der VTable Fehler entweder durch fehlende Kopf- / Klassendefinitionen verursacht werden oder durch typoes in diesen Definitionen, so das erste, was um sicherzustellen, dass zu tun ist, bekommen Sie die Kopf- und Quellen direkt (und in Projekt enthalten). Ich habe persönlich Qt auf die niedrigste Hölle dafür verflucht und verpasste dass winzige Tippfehler in der Projektdatei, nicht Spaß:)

Ja, VTable Fehler sind eine Hündin.
Sie haben den Code () -Methode zu implementieren, die auch eine rein virtuelle Methode ist.

Von der QAbstractTableModel Dokumentation :

  

Subclassing
  Wenn QAbstractTableModel Subklassen, müssen Sie implementieren rowCount (), column () und Daten () .

Ich bin auch ein Vtable Problem habe, und ich implementiert Daten (), so fehle ich anderen virtuellen Mist, aber ich weiß nicht whitch ein.

Dies ist ein ziemlich häufiger Fehler, wenn ein Objekt rel="nofollow nicht moc ist ‚ed . Ich würde die ganze Debug-Dokument rel="nofollow sich einige Zeit auf der Straße retten .

Um dieses Problem zu beheben, habe ich Q_OBJECT von Tablemodel entfernen, neue Klasse TableModelController gemacht, dass von QObject abgeleitet und haben innerhalb 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;
};

Dann benutze ich TableModelController zu Tablemodel Methond und öffentliche Slots wirft Zugang zu bekommen. Ich bin verwenden QtCreator

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top