如何在选择多个项目时清除QListView的选择

How to clear the selection of QListView when multiple items are selected?

本文关键字:选择 清除 QListView 项目      更新时间:2023-10-16

我正在开发一个Qt应用程序,其中有一个QListView。列表中的项目很少。我的应用程序要求根据用户的选择重新排列项目。一切都很好,但我面临一个小问题。

当我使用鼠标进行多项选择时,即通过拖动鼠标选择项目,即使在我进行了一些重新排列操作后,它也会在QlistView上留下选择标记。我确信这与清除选择有关。我试着使用repaint()或clearFocus(),但似乎什么都不起作用。

例如,当我们选择一组文件夹时,我们拖动鼠标,这个实习生会给我们一个矩形框,它覆盖了它下面的所有项目。这个特定的矩形框会留在我的QListView中。选择项目后,我不想要它。

我有一个mousemoveevent,我在里面做它:

    void BinListView::mouseMoveEvent (QMouseEvent *event) {
        if (NULL == event) {
            return;
        } else {
            if (Qt::LeftButton & event->buttons ()) {
                int nDis = (event->pos () - m_posStart).manhattanLength ();
                if (nDis >= QApplication::startDragDistance ()) {
                    startDrag (m_posStart);
                }
            }
#ifdef QT_NO_DEBUG
            QListView::mouseMoveEvent (event);
            QListView::repaint();
            QListView::clearFocus();
#endif
        }
        repaint();
    } 

如果你注意到QT_NO_DEBUG区域,你会看到我清除焦点并重新喷漆,但没有任何帮助。这个问题的解决方案是什么?

附言:我正在以释放模式运行它。

使用

void QAbstractItemView::clearSelection() [slot]

清除选择

此外,所有视图都有一个选择模型,您可以通过以下方式访问:

QItemSelectionModel * QAbstractItemView::selectionModel() const

这允许选择做更多的事情

查看项目视图中的处理选择

另一件事。。。

#ifdef QT_NO_DEBUG

意味着释放

#ifndef QT_NO_DEBUG

将是调试模式,我确信,它不会编译您粘贴的

代码

使用QAbstractItemView::clearSelection函数。

如果您已经将QListView子类化,则可以使用clearSelection(); 来调用它