QT Eigenes Table Model wird nicht angezeigt



  • Ich hab mir mein eigenes TableModel geschrieben, aber es wird weder der Header noch der Inhalt angezeigt. Woran kann das liegen?

    Model

    /*
     * Created on 06.01.2010
     *
     * Copyright (c) 2009, Kay Czarnotta
     *
     * All rights reserved.
     */
    #ifndef SIGNALTABLEMODEL_H
    #define SIGNALTABLEMODEL_H
    
    #include <QAbstractItemModel>
    #include <QVector>
    
    #include "TSignal.h"
    
    class SignalTableModel : public QAbstractItemModel
    {
    public:
        SignalTableModel();
    
        QModelIndex index(int row, int column, const QModelIndex & parent = QModelIndex() ) const;
        QModelIndex parent(const QModelIndex& index ) const;
        int rowCount(const QModelIndex& parent = QModelIndex()) const;
        int columnCount(const QModelIndex& parent = QModelIndex() ) const;
        QVariant data(const QModelIndex& index, int role = Qt::DisplayRole ) const;
        bool setData (const QModelIndex& index, const QVariant& value, int role = Qt::EditRole );
        Qt::ItemFlags flags(const QModelIndex& index ) const;
        QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
    
        void addSignal(int column, Signal* sig);
        void setColumnCount(int count);
    
    protected:
        QVector< QVector<Signal*>* >* tableData;
        QVector<QString> header;
    };
    
    #endif // SIGNALTABLEMODEL_H
    
    /*
     * Created on 06.01.2010
     *
     * Copyright (c) 2009, Kay Czarnotta
     *
     * All rights reserved.
     */
    #include "SignalTableModel.h"
    #include "Settings.h"
    
    #include <QModelIndex>
    #include <QDebug>
    
    SignalTableModel::SignalTableModel()
    {
        tableData = new QVector< QVector<Signal*>* >();
    }
    
    QModelIndex SignalTableModel::index(int row, int column, const QModelIndex& parent) const
    {
        qDebug()<< "[M] index (" << row << "," << column << ") " << parent;
        QModelIndex index;
        if(tableData->count() > column && tableData->at(column)->count() > row)
            index = createIndex(row, column, tableData->at(column)->at(row));
        qDebug() << "[R] Index " << index;
        return index;
    }
    
    QModelIndex SignalTableModel::parent(const QModelIndex& index ) const
    {
        qDebug()<< "[M] parent " << index;
    
        QModelIndex ret;
        if(tableData->count()>index.column() && tableData->at(index.column())->count()>index.row()
           && index.row() > 0)
            ret = createIndex(index.row()-1, index.column(), tableData->at(index.column())->at(index.row()-1));
    
        qDebug() << "[R] Parent " << ret;
        return ret;
    }
    
    int SignalTableModel::rowCount(const QModelIndex& parent) const
    {
        qDebug()<< "[M] rowCount "<< parent;
    
        int rowCount = 0;
        if(tableData->count() > parent.column() && parent.column() >= 0)
            rowCount = tableData->at(parent.column())->count();
        qDebug() << "[R] RowCount: " << rowCount;
        return rowCount;
    }
    
    int SignalTableModel::columnCount(const QModelIndex& parent) const
    {
        qDebug()<< "[M] columnCount "<< parent;
        int colCount = tableData->count();
        qDebug() << "[R] ColumnCount: " << colCount;
        return colCount;
    }
    
    QVariant SignalTableModel::data(const QModelIndex& index, int role) const
    {
        if(tableData->count()<=index.column() || tableData->at(index.column())->count()<=index.row())
            return "";
    
        Signal* sig = tableData->at(index.column())->at(index.row());
        if(index.column()%2==0)
            return sig->getRacer();
        else
            return sig->getTime();
    }
    
    bool SignalTableModel::setData(const QModelIndex& index, const QVariant& value, int role)
    {
        if(tableData->count()<=index.column() || tableData->at(index.column())->count()<=index.row())
            return false;
    
        if(index.column()%2==0)
        {
            QString s = value.toString();
            tableData->at(index.row())->at(index.row())->setRacer(s);
        }
        emit dataChanged(index, index);
        return true;
    }
    
    Qt::ItemFlags SignalTableModel::flags(const QModelIndex& index ) const
    {
        if(index.column()%2==0)
            return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable;
        else
            return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
    }
    
    QVariant SignalTableModel::headerData(int section, Qt::Orientation orientation, int role) const
    {
        qDebug()<< "[M] headerData "<< section << "," << orientation << "," << role;
        qDebug() << "[R] Header: " << header.at(section);
        return header.at(section);
    }
    
    void SignalTableModel::addSignal(int column, Signal* sig)
    {
        if(tableData->count()<=column)
            return;
    
        tableData->at(column)->append(sig);
    
        QModelIndex index = createIndex(column, tableData->at(column)->count(), sig);
        emit dataChanged(index, index);
        reset();
    }
    
    void SignalTableModel::setColumnCount(int count)
    {
        if(tableData->count()!=0)
        {
            for(int i=0;i<tableData->count();i++)
                delete tableData->at(i);
            tableData->clear();
            header.clear();
        }
        for(int i=0;i<count;i++)
        {
            tableData->append(new QVector<Signal*>());
            QString s = "abc " + QString::number(i);
            //setHeaderData(i,Qt::Horizontal,i/*%2==0?"":Settings::getSlotName(i)*/, Qt::DisplayRole);
            header.append(s/*%2==0?"":Settings::getSlotName(i)*/);
        }
        reset();
        emit headerDataChanged(Qt::Horizontal, 0, count);
    }
    

    Verwendet wirds hier

    qDebug() << "+++++++++++++++++++++++++++++++";
        this->signalTimeModel = new SignalTableModel();
        this->ui->timesTable->setModel(signalTimeModel);
        qDebug() << "...............................";
    
        qDebug() << "------------------------";
        signalTimeModel->setColumnCount(colCount);
        qDebug() << "========================";
    


  • QVariant SignalTableModel::data(const QModelIndex& index, int role) const
    {
        if(tableData->count()<=index.column() || tableData->at(index.column())->count()<=index.row())
            return "";
    
        Signal* sig = tableData->at(index.column())->at(index.row());
        if(index.column()%2==0)
            return sig->getRacer();
        else
            return sig->getTime();
    }
    

    ich würde hier den Wert von role abfragen und je nachdem entscheiden was zu machen ist.

    switch( role )
    	{
    	case Qt::DisplayRole:
    		{
    			QString qstr("item1");
    			return qstr;
    		}
    
    	default:
    		return QVariant();
    	}
    }
    

Anmelden zum Antworten