У меня есть некоторые данные, например
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;
Может быть, кто-то уже решил эту проблему?
Спасибо!