2011-11-28 29 views
1

有人可能會告訴我,爲什麼這個代碼爲地獄般的怪異,不會在視圖中顯示數據?查看不顯示來自模型的數據

#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

我換成你的自定義模型以'QStringListModel'它工作得很好。所以,你的'File_Model'類有個問題。現在找到這個類有什麼問題很簡單:P –

+0

@ChrisParton是的,正如webcletic正確地向我指出的那樣,需要指定Qt :: DisplayRole。 – smallB

回答

2

問題在於你的data函數。您應該檢查顯示之前的東西的作用:

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

    return QVariant(); 
} 

另外請注意,你不必在你的情況下使用setDatasetData是用來編輯模型的,不用用某些值初始化它們。

要在模型中啓用編輯,還必須實現setData(), 和重新實現標誌()以確保返回ItemIsEditable。

相反,你可以在模型中添加一個公共職能,而是把它叫做:

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

@webcletic,非常感謝,我以爲我正在癡迷。關於這個setData,我是否正確理解setData被視圖調用的這個模型附加了? – smallB

+0

setData在用戶從視圖手動編輯模型時調用。例如雙擊單元格並更改其值。 – pnezis

相關問題