Как создать связь между QAbstractItemModel и моими данными std :: map <>? - PullRequest
0 голосов
/ 15 августа 2011

У меня есть некоторые данные, например

Company Name | Person Field
-----------------------
(Company1)   | [Company1 Descr]
     L       | [Person1]
(Company2)   | [Company2 Descr]
     L       | [Person2]
     L       | [Person3]
(Company3)   | [Company3 Descr]
     L       | [Person4]
(Company4)   | [Company4 Descr]
     L       | [Person5]

Это std::map< CompanyPtr, PersonPtr >. Я хочу установить этот map в QAbstractItemModel, а после этого подключить его к QTreeView.

Я использовал пример Простая модель дерева , но она сложная (здесь я говорю о TreeItem классе и setupModelData методе).

Вот мой класс модели:

class ContractorModel : public QAbstractItemModel
{
     Q_OBJECT

     // types
     enum Position
     {
            PositionCompany = 0
          , PositionContractor
          , ColumnCount
     };

     typedef   std::map< CompanyPtr, ContractorPtr >   ComConMap;
     typedef  std::pair< CompanyPtr, ContractorPtr >   ComConPair;

     // methods
     void _init();

public:
     ContractorModel( QObject* parent = 0 );
     ~ContractorModel();

     QVariant data( const QModelIndex &index, int role /* = Qt::DisplayRole */ ) const;
     QVariant headerData( int section, Qt::Orientation orientation, int role /* = Qt::DisplayRole*/ ) const;

     QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const;
     QModelIndex parent( const QModelIndex &index ) const;

     int rowCount( const QModelIndex &parent /* = QModelIndex */ ) const;
     int columnCount( const QModelIndex &parent /* = QModelIndex */ ) const;

signals:
     void resizeToContents();

public slots:
     void refresh();
     void refreshData();

protected:
private:
     ContractorItem* rootItem;
     ComConMap buddies_ccm_;
};

И в моем классе я не могу правильно реализовать эти два метода:

QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const;
QModelIndex parent( const QModelIndex &index ) const;

Может быть, кто-то уже решил эту проблему?

Спасибо!

...