【问题标题】:Qt: Attempt to add Drag and Drop to Editable Tree Model example not workingQt:尝试将拖放添加到可编辑树模型示例不起作用
【发布时间】:2021-04-28 02:02:03
【问题描述】:

我正在尝试学习如何在 Qt 中实现拖放到模型/视图设置。作为练习,我尝试对 Qt 网站上的Editable Tree Model example 进行此操作:

为了通过拖放扩展它,我按照 Qt 文档中的说明进行了操作 "Using Drag and Drop with View Items",更具体地说是 "Using model/view classes"

我将尝试的代码放在a GitHub repository。主要修改如下,但还有其他重要修改; here are the full changes 根据文档。

/* mainwindow.cpp -- THIS IS NOT ALL CHANGES -- See link above for all changes */
view->setSelectionMode(QAbstractItemView::SingleSelection);
view->setDragEnabled(true);
view->viewport()->setAcceptDrops(true);
view->setDropIndicatorShown(true);
view->setDragDropMode(QAbstractItemView::DragDrop);

但是,这并不完全奏效。虽然我可以拖放项目,但复制的项目显示为空白。这个可以在this screen capture看到,但是主要截图是:

请注意,文档描述了需要重新实现 QAbstractItemModeldropMimeData 以实现拖放功能,而我没有这样做。这是因为,在检查 source code for that class 时,我发现 its default implementation 应该已经可以在拖放中复制项目,因为它是 uses the default application/x-qabstractitemmodeldatalist MIME 格式和 uses setItemData 用于插入的项目。

这里有什么问题?是默认的dropMimeData 不起作用,还是其他原因?

【问题讨论】:

    标签: c++ qt drag-and-drop qabstractitemmodel qabstractitemview


    【解决方案1】:

    示例提供的模型只接受角色Qt::EditRole的设置数据。请参阅treemodel.cpp 中的第 263 行

    bool TreeModel::setData(const QModelIndex &index, const QVariant &value, int role)
    {
        if (role != Qt::EditRole)
            return false;
    
        ...
    }
    

    删除该部分或添加Qt::DisplayRole,数据将正确设置。

    【讨论】:

    • 太棒了!谢谢!
    猜你喜欢
    • 1970-01-01
    • 2013-12-12
    • 2018-11-16
    • 2021-12-03
    • 2013-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多