2013-06-27 81 views
1

我正在Qt应用程序,我有一个QListView。列表中的项目很少。我的应用程序需要根据用户的选择重新排列项目。一切工作正常,但我面临一个小问题。如何在选择多个项目时清除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区,你会看到我的结算重点和重绘但没有什么是我的帮助。 ANY解决这个问题?

P.S:我在释放模式运行它。

回答

1

使用

void QAbstractItemView::clearSelection() [slot] 

清除选择

而且,所有观点都有一个选择模型,您可以访问通过:

QItemSelectionModel * QAbstractItemView::selectionModel() const 

,允许做更多的事情选择

看看Handling selections in item views

另一件事......

#ifdef QT_NO_DEBUG 

手段释放

#ifndef QT_NO_DEBUG 

将调试模式,和IM肯定的是,它不会编译您粘贴

+0

清除选择调用它不会让我选择的项目。我担心的是,当我拖动鼠标并选择设置为项目时,它将在列表视图上留下选择标记。 – Gojira

+0

我理解错了。但似乎不仅仅是我。也许你应该重新提出这个问题。无论如何。检查那些方法调用,我确定是错误的 – Trompa

+0

我试过了,但它的工作。例如。当我们选择一组文件夹时,我们拖动我们的鼠标,该实习生给我们提供了一个矩形框,它覆盖了它下面的所有项目。该特定的矩形框始终保持不变。我怎样才能清除它? – Gojira

0

使用QAbstractItemView::clearSelection函数的代码。

如果你的子类QListView你可以用clearSelection();

+0

感谢您的答复。清除选项不会让我选择项目。我担心的是,当我拖动鼠标并选择设置为项目时,它将在列表视图上留下选择标记。 – Gojira

+0

@Gojira对不起,我误解了这个问题。我认为你在清理选择时遇到了问题。 – thuga

+0

@Gojira顺便说一下,“选择标记”是什么意思?它是突出显示的选定项目还是焦点项目的虚线边框?我也与你的'startDrag'函数调用混淆。 [它需要一个下降动作作为参数](https://qt-project.org/doc/qt-4.8/qabstractitemview.html#startDrag),但你给它一个位置?或者这是你自己的功能? – thuga

相关问题