在 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 需要对数据进行解码,并且需要用拖动的数据插入新的行/列。