如何在QListWidget(或QListView)中修改Drag'n'Drop的行为

时间:2016-03-29 08:44:21

标签: c++ qt

我有一个包含两个列表的窗口。此图像上的项目是从某些测试阵列预生成的。在小项目之前添加空格以使整个事物看起来像树列表:

image description

用户可以从左向右拖动项目。我在QtDesigner中启用了这个:

image description

然后行为是自动的,没有我的代码,但它已经将项目添加到第二个列表中:

image description

但显然它只是复制该项目。复制项目并将其添加到正确的位置很好,但我需要在删除期间做一些事情:

  • 在项目显示文字之前添加空格
  • 将此更改投影到程序中的实际数据
  • 确保项目不能放到列表顶部或空列表中

那么我在哪里覆盖掉线后添加项目的功能?如何访问drop事件添加的项目?如果项目无效,如何取消活动?

我尝试覆盖QListWidget::dropEvent,但我不知道应该编写什么代码。我查看了父类的源代码,但我不知道他们在做什么。

1 个答案:

答案 0 :(得分:0)

我猜你已经找到了必需品,不知道我是否错过了什么,但如果你已经能够重载QListWidget :: dropEvent,你为什么不把它作为一个经典的“添加”从你的小部件处理? / p>

例如:

void QListWidget::dropEvent(QDropEvent *event) 
{
    const QMimeData *mimeData = event->mimeData();
    Add(mimeData->text()); // probably the slot you defined for your Add button
}

我想你已经在那个插槽中有了验证器。我认为你不需要找到代码的特定部分,将元素添加到列表中然后重载它,因为你已经删除了某些东西的信息,在那一点上自己做所有事情。