Перетаскивание скрытых столбцов QStandardItemModel в QTreeView
В QTreeView я хотел бы копировать строки с помощью перетаскивания. Соответствующие настройки перетаскивания выглядят так:
this->setDragDropMode( QAbstractItemView::DragDrop );
this->setDropIndicatorShown( true );
Это прекрасно работает для столбцов базового QStandardItemModel, которые визуализируются QTreeView. Но не все столбцы модели визуализируются (см. Скрыть будущие столбцы QStandardItemModel в QTreeView):
void MyViewClass::columnCountChanged(int p_nOldCount , int p_nNewCount )
{
QTreeView::columnCountChanged( p_nOldCount, p_nNewCount );
for ( int i = MyViewClass::m_nColumnType; i < p_nNewCount; ++i )
{
setColumnHidden( i, true );
}
}
Как я могу скопировать всю строку QStandardItemModel путем перетаскивания в QTreeView, когда не все столбцы визуализируются QTreeView?
1 ответ
Решение
Нашел решение:
Нужно наследовать / реализовывать функции QAbstractModel:
- виртуальный QMimeData * mimeData(const QModelIndexList &indexes) const;
- виртуальный bool dropMimeData(const QMimeData *p_grData, Qt::DropAction p_grAction, int p_nRow, int p_nColumn, const QModelIndex &p_grParentIdx);
- виртуальный QStringList mimeTypes() const;
в то время как mimeData должен кодировать данные, а dropMimeData должен декодировать данные и должен вставить новую строку / столбец с перетаскиваемыми данными.