拖拽在QTreeView中删除隐藏的QStandardItemModel列

时间:2015-12-09 12:48:25

标签: c++ qt drag-and-drop qtreeview qstandarditemmodel

在QTreeView中,我想通过拖放来复制行。相应的Drag&丢弃设置如下:

this->setDragDropMode( QAbstractItemView::DragDrop );
this->setDropIndicatorShown( true );

这对于由QTreeView可视化的底层QStandardItemModel的列很有用。但并非所有模型列都可视化(参见Hide future columns of QStandardItemModel in 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 );
    }
}

如果QTreeView无法显示所有列,我如何通过拖放QTreeView来复制QStandardItemModel的整行?

1 个答案:

答案 0 :(得分:0)

找到解决方案:

必须继承/实现QAbstractModel函数:

  • 虚拟QMimeData * mimeData(const QModelIndexList&amp; indexes)const;
  • virtual bool dropMimeData(const QMimeData * p_grData,Qt :: DropAction p_grAction,int p_nRow,int p_nColumn,const QModelIndex&amp; p_grParentIdx);
  • 虚拟QStringList mimeTypes()const;

虽然mimeData需要对数据进行编码,但dropMimeData需要对数据进行解码,并且需要插入带有数据的新行/列。