【问题标题】:Moving items up and down in a QListWidget in different view在不同视图中的 QListWidget 中上下移动项目
【发布时间】:2014-10-16 09:09:39
【问题描述】:

我正在尝试以编程方式移动列表小部件项目。如果移动在当前视图中,我可以成功移动列表小部件。如果我尝试跨视图移动列表小部件项目(即使用滚动条),则移动无法按预期工作。即列表小部件项目没有反映

代码片段:

void func(int fromPage, int toPage)
{
 QListWidget* expListWidget =i.next();
 QListWidgetItem* widgetItem = expListWidget->takeItem(fromPage);
 expListWidget->insertItem(toPage,widgetItem);
}

【问题讨论】:

  • 您应该提供更多信息。如果您以编程方式移动它,为什么要提到滚动条?你希望你的“代码片段”做什么?实际发生了什么?创建一个重现您的问题的工作示例。
  • 提供更多信息:假设我有 50 个列表小部件项。我只能看到 3 个列表小部件项目。要查看其他人,我必须滚动。如果我使用上面的 sn-p 在视图中移动列表小部件项目(即,我将第二个列表小部件项目移动到第一个小部件项目)。它正在成功地将第二个列表小部件项目移动到第一个项目小部件。如果我尝试跨视图移动(即,将第 45 个列表小部件项目移动到第 2 个列表小部件项目),则什么也不会发生(即第 45 个项目仍然是第 45 个项目,第 2 个列表小部件项目仍然是第 2 个项目)
  • 您能否提供您在“视图”之间移动项目的代码?上面的代码只改变了两个附近的项目。

标签: c++ qt


【解决方案1】:

下面是一个示例,如何独立于它们所在的位置上下移动项目:

QListWidget* lw1 = new QListWidget;

for (int i = 0; i < 500 ; i++)
{
    QListWidgetItem* item = new QListWidgetItem(QString::number(i));
    lw1->addItem(item);
}

//move from lower part to the top
QListWidgetItem* i = lw1->takeItem(400);
lw1->insertItem(0, i);

//move from the top to the lower part of the list
i = lw1->takeItem(1);
lw1->insertItem(400, i);

【讨论】:

  • 我使用 setItemWidget 将一个小部件附加到我的项目。当我移动我的物品时,附加的小部件会消失。使用项目小部件的任何提示?
  • @ErwanDouaille 您找到问题的答案了吗?
  • @nabroyan 当然,这是由于我的一项功能删除不当所致。我记得我删除了小部件并创建了一个新小部件并在列表中设置它的位置
  • @ErwanDouaille 是的,你是对的。另外,我发现this thread 描述了同样的事情。
猜你喜欢
  • 1970-01-01
  • 2016-02-21
  • 2021-09-12
  • 2021-09-14
  • 1970-01-01
  • 2021-10-26
  • 2012-07-12
  • 1970-01-01
  • 2017-01-07
相关资源
最近更新 更多