2011-11-23 38 views
0

我已經樹視圖中,我想通過file_dialog.getOpenFileNames()顯示用戶選擇的文件; file_dialog是QFileDialog。 我沒有創建模型類:模型視圖困難

class File_Display_Model : public QAbstractItemModel 
    { 
     Q_OBJECT 
    private: 
    QStringList* selected_files_; 
    public: 
    explicit File_Display_Model(QObject *parent = nullptr,QStringList* selected_files = nullptr); 
    int File_Display_Model::columnCount(const QModelIndex & parent) const 
{ 
    selected_files_->count(); 
} 

QVariant File_Display_Model::data(const QModelIndex & index, int role) const 
{ 
    if (!index.isValid()) 
    { 
      return QVariant(); 
    } 
    else 
    { 
     if (role == Qt::DisplayRole) { 
       if (index.row() == index.column()) 
       { 
        return 0; 
       } 
       else 
       { 
        return selected_files_->at(role); 
       } 
      } 
      return QVariant(); 
    } 
} 

QModelIndex File_Display_Model::index(int row, int column, const QModelIndex & parent) const 
{ 
    /*DUMMY - HERE I JUST DON'T KNOW WHAT TO RETURN*/ 
    return QModelIndex(); 
} 

QModelIndex File_Display_Model::parent(const QModelIndex & index) const 
{ 
    return QModelIndex(); 
} 

int File_Display_Model::rowCount(const QModelIndex & parent) const 
{ 
    selected_files_->count(); 
} 

    signals: 

    public slots: 

    }; 

而且我還提供了這個類的模型樹視圖。這個類中的索引方法存在問題 - 我不知道要返回什麼。
有人可以幫助我,並指導我如何使其工作,以便用戶選擇的文件顯示在樹視圖中?

回答

2

首先沒有理由使用QStringList*。 Qt使用implicit sharing,因此將它作爲參數傳遞是有效的(不要忘記QStringList不過是QList<QString>)。

其次,您應該查看優秀的Qt Model/View Programming文檔。

行和列數

您正在試圖建立一個樹模型,所以你應該仔細閱讀tree model example。請注意,rowCountcolumnCount函數具有模型索引的參數。

行數()函數返回子項的數目爲 對應於一個給定的模型索引的項,或 頂級項目的數目,如果無效索引指定

和列數

由於每個項目的管理自己的列數據,該columnCount() 函數調用項目自身columnCount()樂趣至 確定給定模型索引有多少個列。由於 與rowCount()功能,如果指定一個無效的模型索引,返回是從根項目

所以,你必須考慮你的StringList將如何被表示爲樹模型確定 的列數。你將有什麼專欄,以及每個層次將存儲哪些專欄?行層次結構將如何?爲什麼你使用列計數字符串的數量?

型號指數

當你重新實現index()功能,你只需要檢查,如果所提供的行和列是有效的,如果是你應該調用createIndex功能。這一切都取決於你的模型包含什麼數據以及你如何構建它們。既然你想實現一個樹模型,你還必須考慮父項。

當重新實現在子類中該函數,調用上的createIndex()來 產生其他組件可以用來參考模型中的項目 模型索引。

+0

[請勿濫用'code formatting'](https://meta.stackexchange.com/q/135112/349538) –