gpt4 book ai didi

c++ - 使 QTreeWidget 项目在拖放时展开

转载 作者:行者123 更新时间:2023-11-28 05:32:06 26 4
gpt4 key购买 nike

我正在尝试找到一种方法,无需重新实现拖放,当将项目放入其中时,树项目就会展开。我研究了在顶层 addItem 上展开所有内容以及覆盖了 dropEvent。 addItem 方法不起作用(假设这是因为 addItem 未被 native 拖放实现使用)并且 dropEvent 提出了许多问题,特别是 mimeData 不适合并让我回到树中。我是 Qt 的新手,所以我可能遗漏了一些简单的东西。

欢迎任何其他方法。

编辑:处理@G.M.提供的信息。我已经回去尝试覆盖 dropEvent。

void ScenarioTreeWidget::MyTreeWidget::dropEvent(QDropEvent *event)
{
QModelIndex modelIndex = this->indexAt(event->pos());
QTreeWidgetItem* item = this->itemAt(modelIndex.row(), modelIndex.column());
this->expandItem(item);
QWidget::dropEvent(event);
}

两个问题,正在扩展的项目是被拖动的项目,而不是它被拖放到的项目(不知道这是因为索引是被拖动项目的索引还是我的中有错误代码)。此外,我仍然失去了默认的 dropEvent 行为(当我使用此代码拖放时,所有项目都保持在拖放之前的位置)。

最佳答案

您正在将 QModelIndex 行和列传递给 QTreeWidget::itemAt,但它实际上想要的是小部件相对 x 和y 坐标。

根据您提供的信息,我认为您需要的是...

void ScenarioTreeWidget::MyTreeWidget::dropEvent (QDropEvent *event)
{
QModelIndex modelIndex = this->indexAt(event->pos());
QTreeWidgetItem* item = this->itemAt(modelIndex);
this->expandItem(item);
QWidget::dropEvent(event);
}

或者(更简洁一点)...

void ScenarioTreeWidget::MyTreeWidget::dropEvent (QDropEvent *event)
{
QTreeWidgetItem* item = this->itemAt(event->pos());
this->expandItem(item);
QWidget::dropEvent(event);
}

关于c++ - 使 QTreeWidget 项目在拖放时展开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39254878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com