视图不显示模型中的数据

时间:2011-11-28 10:04:15

标签: qt

有人可以请告诉我,为什么这个代码对于怪异的地狱,不会在视图中显示数据?

#include <QApplication>
#include <QtGui>

class File_Model : public QAbstractItemModel
{
private:
    QStringList data_;
public:

    File_Model()
    {}
    QVariant data(const QModelIndex &index, int role) const
    {


        return data_.at(index.row());
    }

    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::DisplayRole)
    {
        switch(role)
        {
        case Qt::DisplayRole:
        data_ =  value.toStringList();
        emit dataChanged(index,index);
        return true;
        }
        return false;
    }

    virtual QModelIndex index(int row, int column, const QModelIndex&) const
    {
        return createIndex(row,column);
    }
    virtual QModelIndex parent(const QModelIndex&) const
    {
        return QModelIndex();
    }
    virtual int rowCount(const QModelIndex&) const
    {
        return data_.size();
    }
    virtual int columnCount(const QModelIndex&) const
    {
        return 1;
    }
};


int main(int argc,char** argv)
{
    QApplication app(argc,argv);
    QDir dir(QDesktopServices::storageLocation(QDesktopServices::HomeLocation));
    File_Model* model = new File_Model;//(dir.entryList());
   bool t =  model->setData(QModelIndex(),dir.entryList());
    QListView* view = new QListView;
    view->setModel(model);

    view->show();

    return app.exec();
}

1 个答案:

答案 0 :(得分:2)

问题在于您的data功能。您应该在显示内容之前检查角色:

QVariant data(const QModelIndex &index, int role) const
{
    if (role == Qt::DisplayRole)
        return QVariant(data_.at(index.row()));

    return QVariant();
}

另请注意,您不必在案例中使用setDatasetData是用于编辑模型的udes,而不是用一些值初始化它们。

  

要在模型中启用编辑,还必须实现setData(),   并重新实现flags()以确保返回ItemIsEditable。

相反,您可以在模型中添加公共函数并改为调用它:

void setEntries(QStringList entries)
{
    beginInsertRows(createIndex(0,0), 0, entries.count());
    data_ =  entries;
    endInsertRows();
}