【问题标题】:How can I get the indices of QListWidget::selectedItems()?如何获取 QListWidget::selectedItems() 的索引?
【发布时间】:2016-06-02 20:37:23
【问题描述】:

我有QListWidget,我需要获取所选项目的索引。 (我可以按值处理列表中的项目,但我有std::vector,其中包含列表中每个项目的一些对象,我还需要从中删除它们。) 有一个函数indexFromItem,但它是受保护的(?)所以我不能使用它。

有什么想法吗?

QList<QListWidgetItem *> itemList = lw1->selectedItems();

【问题讨论】:

  • 不确定您的情况,但该索引适用于某些模型,并且 QListWidget 旨在处理单个项目而不是模型。你有 QListWidgetItem * itemAt(int x, int y) const 与 x 和 y 'indexes'。
  • 您是在寻找QModelIndex 还是列表中项目的整数索引(即其位置)?

标签: c++ qt qwidget qlistwidgetitem


【解决方案1】:

你可以使用也许:

list->selectionModel()->selectedIndexes()

其中listQListWidget 的一个实例。
不确定它是否会返回您正在寻找的内容。

来自documentation

返回所有选定模型项索引的列表。该列表不包含重复项,并且未排序。

QListWidget 也有一个名为selectedIndexes 的方法,但它是一个受保护的方法,所以你必须使用这种棘手的方法来获取它们。

【讨论】:

    【解决方案2】:

    我不确定这是正确的方法,但它对我有用:

    void ScannerWindow::on_ipList_itemDoubleClicked(QListWidgetItem *item)
    {
        qDebug() << ui->ipList->row(item);
    }
    

    其中ui-&gt;ipListQListWidget

    【讨论】:

    • 0) 您没有使用由 Creator 生成的插槽,是吗? 1) 问题是关于 selected 索引的,QListWidget 提供了不同类型的选择,但通常您可以选择多个项目,并且不仅可以通过双击它们来选择。 2)因此,您的解决方案仅适用于一行,只能通过双击选择。
    • 0) 这个插槽是由 Creator 自动生成的 2) 是的,“双击”只是我的情况,但它也适用于 itemClicked(QListWidgetItem *item) ...我尝试选择多个排在QListWidget 我不能。
    • 如果您将 selectionMode 更改为 SingleSelection/NoSelection 以外的任何内容,您将能够使用 Ctrl/Shift、箭头键并选择多个项目。更糟糕的是,可能没有点击每一个。
    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 2014-08-17
    相关资源
    最近更新 更多