在 QTreeView 中拖放隐藏的 QStandardItemModel 列
Drag & Drop of hidden QStandardItemModel columns in QTreeView
在 QTreeView 中,我想通过拖放来复制行。相应的拖放设置如下所示:
this->setDragDropMode( QAbstractItemView::DragDrop );
this->setDropIndicatorShown( true );
这对于由 QTreeView 可视化的底层 QStandardItemModel 的列来说效果很好。但并非模型的所有列都可视化(参见 ):
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 );
}
}
当不是所有列都被 QTreeView 可视化时,如何通过拖放 QTreeView 来复制 QStandardItemModel 的整行?
找到解决方案:
必须继承/实现 QAbstractModel 函数:
- 虚拟 QMimeData * mimeData(const QModelIndexList &indexes) const;
- virtual bool dropMimeData(const QMimeData *p_grData, Qt::DropAction p_grAction, int p_nRow, int p_nColumn, const QModelIndex &p_grParentIdx);
- 虚拟 QStringList mimeTypes() 常量;
而 mimeData 需要对数据进行编码,而 dropMimeData 需要对数据进行解码,并且需要用拖动的数据插入新的行/列。
在 QTreeView 中,我想通过拖放来复制行。相应的拖放设置如下所示:
this->setDragDropMode( QAbstractItemView::DragDrop );
this->setDropIndicatorShown( true );
这对于由 QTreeView 可视化的底层 QStandardItemModel 的列来说效果很好。但并非模型的所有列都可视化(参见
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 );
}
}
当不是所有列都被 QTreeView 可视化时,如何通过拖放 QTreeView 来复制 QStandardItemModel 的整行?
找到解决方案:
必须继承/实现 QAbstractModel 函数:
- 虚拟 QMimeData * mimeData(const QModelIndexList &indexes) const;
- virtual bool dropMimeData(const QMimeData *p_grData, Qt::DropAction p_grAction, int p_nRow, int p_nColumn, const QModelIndex &p_grParentIdx);
- 虚拟 QStringList mimeTypes() 常量;
而 mimeData 需要对数据进行编码,而 dropMimeData 需要对数据进行解码,并且需要用拖动的数据插入新的行/列。