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

时间:2013-06-27 09:13:45

标签: c++ qt qt4 qlistview

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

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

E.g当我们选择一组文件夹时,我们拖动鼠标,实习生给我们的矩形框覆盖了它下面的所有项目。那个特殊的矩形框保留在我的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区域,您将看到我的清除焦点并重新绘制,但没有任何帮助我。解决这个问题的方法是什么?

P.S。:我正在以发布模式运行它。

2 个答案:

答案 0 :(得分:2)

使用

void QAbstractItemView::clearSelection() [slot]

清除选择

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

QItemSelectionModel * QAbstractItemView::selectionModel() const

允许做更多的事情选择

查看Handling selections in item views

另一件事......

#ifdef QT_NO_DEBUG

意味着发布

#ifndef QT_NO_DEBUG

将是调试模式,并且我确定,它不会编译您粘贴的代码

答案 1 :(得分:0)

使用QAbstractItemView::clearSelection功能。

如果您有子QListView,则可以使用clearSelection();

来调用它