Eigenes Tablemodel



  • Hallo erstmal!

    Ich arbeite mit Qt4 unter Linux.

    Mein Ziel ist es, meine Variablen in einer Tabelle darzustellen. Eigentlich ein einfaches Unterfangen, doch irgendwie hab ich das mit dem TableModel nicht ganz verstanden.

    Also: Ich hab mal QAbstractTableModel abgeleitet und ein eigenes gemacht. Diese Klasse müsste eigentlich passen und lässt sich auch compilen. Das Problem liegt eigentlich nur noch in der Einbindung in die QTableView.

    Ich erzeuge mein TableModel im Konstruktor der Hauptklasse mit

    ButtonTableModel btm=new ButtonTableModel(&setList, ui.cbSets, ui.cbTabs, this);
    

    Danach versuch ich es mit

    ui.tvTabContent->setModel(&btm);
    

    mit dem TableView zu verbinden.

    Allerdings schmeißt mir der Compiler folgenden Error:

    Anmerkung: künstlich erzeugte Methode »ButtonTableModel::ButtonTableModel(const ButtonTableModel&)« zuerst hier erfordert
    

    bei der Erzeugung des Models.
    Der Konstruktorkopf des Models lautet wie folgt

    ButtonTableModel(QList<KeyboardSet *> *setList, QComboBox *cbSets, QComboBox *cbTabs, QObject *parent);
    

    Außerdem gibts noch einen

    Fehler: in diesem Zusammenhang
    

    in dieser Zeile des Model Headers:

    class ButtonTableModel : public QAbstractTableModel {
    

    Sind sicher alles Anfängerfehler, aber die machen mir als C++ Neuling stark zu schaffen!

    Danke schon mal für eure Antwort



  • Danke!

    Ich hab das Problem erstmal gelöst 😉

    Eine Frage habe ich noch: Leider werden die Daten in der Tabelle noch nicht angezeigt, die Header aber schon. Welche Funktionen MUSS ich denn alles ausimplementieren? Die Tabelle soll nur anzeigen und sonst nichts!
    Bereits implementiert hab ich die rowCount(), columnCount(), data() und headerData().

    Ein Freund von mir meinte, dass ich die createIndex() Funktion auch brauchen werde, konnte mir dazu aber keine genaueren Infos geben. Ich hab leider auch nichts passendes hierzu gefunden und keine Ahnung für was die Funktion da ist bzw wie ich sie ausimplementiere.

    Meine data Funktion:

    QVariant ButtonTableModel::data(const QModelIndex &index, int role) const
    {
        if(!index.isValid())
            return QVariant();
    
        if(index.row() >= list->size() || index.row() < 0)
            return QVariant();
    
        if(role == Qt::DisplayRole) 
        {
            KeyboardButton *b = list->at(cbSet->currentIndex())->getTabList()->at(cbTab->currentIndex())->getButtonList()->at(index.row());
    
            if(index.column() == 0)
                return b->getTriggerShown();
            else if(index.column() == 1)
                return b->getTriggerReal();
            else if(index.column() == 2)
                return b->getValue();
            else if(index.column() == 3)
                return b->getValueType();
        }
        return QVariant();
    }
    

    Ach ja! Was ist role?

    mfg Domar



  • Ich hab jetzt mal einen debugcode eingebaut nur wird dieser nie ausgeführt!

    Sprich, die data() Funktion nicht aufgerufen. Muss ich mich selber darum kümmern, oder was hab ich falsch gemacht?


  • Mod

    Domar schrieb:

    Ich hab jetzt mal einen debugcode eingebaut nur wird dieser nie ausgeführt!

    Sprich, die data() Funktion nicht aufgerufen. Muss ich mich selber darum kümmern, oder was hab ich falsch gemacht?

    Ist die Signatur von data korrekt?
    http://doc.trolltech.com/4.5/qabstracttablemodel.html

    Evtl. hilft dir auch dies:
    http://doc.trolltech.com/4.5/model-view-model-subclassing.html

    phlox



  • Die Signatur ist korrekt und die Anleitung hilft mir auch nichts weiter 😞


Anmelden zum Antworten