2011-11-23 6 views
0

나는 tree_view를 통해 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을 사용하므로 인수로 전달하는 것이 효율적입니다 (QStringListQList<QString> 이상인 것을 잊지 마십시오).

두 번째로 우수한 Qt Model/View 프로그래밍 설명서를 검토해야합니다.

행과 열은주의 깊게 tree model example을 읽어야 있도록 트리 모델을 만들려고

계산합니다. rowCountcolumnCount 함수는 인수로 모델 인덱스를 갖습니다.

행 개수() 함수는 단순히 위해 주어진 모델 인덱스에 해당하는 항목을 하위 항목의 수를 반환하거나 최상위 항목의 수가 유효하지 않은 인덱스가

을 지정된 경우

각 항목은 자신의 열 데이터를 관리하기 때문에 열의

계산은 columnCount() 기능은 항목의 자신의 columnCount() 재미를 호출 할 수있다 에 대한 명령은 주어진 모델 색인에 대해 몇 개의 열이 있는지를 결정합니다. 잘못된 모델 인덱스가 지정된 경우 rowCount() 기능 으로, 열 수는

그래서 당신은 당신의 stringlist이 트리 모델로 표현되는 방법을 생각해야 루트 항목에서 결정 돌아왔다. 어떻게하면 기둥을 가질 것이며 모든 수준에서 기둥을 저장할 것입니까? 행 계층 구조는 어떻게됩니까? 왜 열 개수로 문자열의 개수를 사용하고 있습니까?

모델 인덱스

방금 ​​예는 createIndex 함수를 호출해야하는 경우 제공된 행과 열이 유효한지 확인해야하는 index() 기능을 구현할. 다시 말하지만 모두 모델에 포함 된 데이터와 구조화 된 데이터에 따라 다릅니다. 트리 모델을 구현하려는 경우 상위 항목도 고려해야합니다.

서브 클래스에서이 기능을 재 구현

는 다른 구성 요소 모델의 항목 을 참조하는 데 사용할 수있는 모델 인덱스를 생성 에 createIndex()를 호출합니다.

+0

[코드 형식을 남용하지 마십시오.] (https://meta.stackexchange.com/q/135112/349538) –