【问题标题】:Drag & Drop of hidden QStandardItemModel columns in QTreeView在 QTreeView 中拖放隐藏的 QStandardItemModel 列
【发布时间】:2016-03-14 18:01:21
【问题描述】:

在 QTreeView 中,我想通过拖放复制行。相应的拖放设置如下所示:

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 的整行?

【问题讨论】:

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


    【解决方案1】:

    找到解决方案:

    必须继承/实现 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() const;

    而 mimeData 需要对数据进行编码,而 dropMimeData 需要对数据进行解码,并且需要使用拖动的数据插入新的行/列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-23
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2022-01-11
      • 1970-01-01
      相关资源
      最近更新 更多