【问题标题】:QTreeWidget drag and drop for reordering selects wrong item用于重新排序的 QTreeWidget 拖放选择了错误的项目
【发布时间】:2014-01-29 14:24:55
【问题描述】:

在遵循此处给出的建议后:QTreeWidget reordering child items by dragging,拖动的项目未被选中。

因此,很自然地,我尝试获取拖动的项目,然后对其调用 setSelected()。

结果是选择了正确on之前的item。

我将 QTreeWidget 子类化以像这样覆盖 dropEvent -

QTreeWidgetItem *pItem;
QModelIndex dropIndex = indexAt(pEvent->pos());

if(dropIndex.isValid() == false)
{
    pEvent->setDropAction(Qt::IgnoreAction);
    pEvent->accept();
    return;
}

pItem = this->itemAt(pEvent->pos());
QTreeWidget::dropEvent(pEvent);

如何获得指向正确 QTreeWidgetItem 的指针?

【问题讨论】:

  • 能否请您显示您在哪里执行选择的代码?

标签: qt drag-and-drop qtreewidget


【解决方案1】:

由于掉落的物品可以“落在”目标物品的上方或下方,因此您需要管理这两种情况并计算移动物品的正确索引。例如:

[..]
virtual void dropEvent(QDropEvent * event)
{
    QModelIndex droppedIndex = indexAt( event->pos() );
    if( !droppedIndex.isValid() )
        return;

    QTreeWidget::dropEvent(event);

    DropIndicatorPosition dp = dropIndicatorPosition();
    if (dp == QAbstractItemView::BelowItem) {
        droppedIndex = droppedIndex.sibling(droppedIndex.row() + 1, // adjust the row number
                                            droppedIndex.column());
    }
    selectionModel()->select(droppedIndex, QItemSelectionModel::Select);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 2014-04-20
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多