2011-11-23 6 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を使いますので、引数として渡すのが効率的です(QStringListQList<QString>以上であることを忘れないでください)。

次に、優れたQt Model/View Programmingのドキュメントを確認してください。

行と列は、あなたが慎重にtree model exampleを読む必要がありますので、ツリーモデルを作成しようとしている

カウント。 rowCountcolumnCount関数は、引数としてモデルインデックスを持っていることに注意してください。

無効なインデックスを

を指定した場合をrowCount()関数は、単に特定のモデル指標に対応 項目の子項目の数、又は トップレベルのアイテムの数を返します

と各項目は独自の列のデータを管理しているので、列数

は、columnCount() 機能は、アイテム自身columnCount()楽しみを呼び出す必要がありますについて指定されたモデルインデックスに対していくつの列が存在するかを決定します( )。無効なモデルインデックスが指定されている場合rowCount()機能付き として、返される列の 数は、ルートアイテム

から決定され、つまり、あなたのSTRINGLISTは、ツリーモデルとして表現する方法を考える必要があります。あなたはどのようにして列を持ち、あらゆるレベルでそこに何が保存されますか?行階層はどのようになりますか?なぜ列数として文字列の数を使用していますか?

モデルインデックス

あなたはあなただけの提供、行と列が有効であり、そうならば、あなたがcreateIndex関数を呼び出す必要があるかどうかを確認する必要がありindex()機能を再実装。繰り返しますが、モデルはどのデータに含まれていてどのように構造化したかによって異なります。ツリーモデルを実装したいので、親アイテムも考慮する必要があります。サブクラスでこの関数を再実装すると、 にCREATEINDEX()を呼び出し

他のコンポーネントは、モデル内のアイテム を参照するために使用できるモデルのインデックスを生成します。

+0

[コードフォーマットを乱用しないでください](https://meta.stackexchange.com/q/135112/349538) –

関連する問題