c-如何在选择多个项目时清除对QListView的选择?
作者:互联网
我正在开发具有QListView的Qt App.列表中没有几个项目.我的应用程序要求根据用户的选择重新排列项目.一切工作正常,但我面临一个小问题.
当我使用鼠标进行多项选择时,即通过拖动鼠标来选择项目,即使我进行了一些重新排列操作后,它也会在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
这样可以做更多的选择
看Handling selections in item views
另一件事 …
#ifdef QT_NO_DEBUG
意味着释放
#ifndef QT_NO_DEBUG
将会是调试模式,而且我肯定不会编译您粘贴的代码
标签:c,qt,qt4,qlistview 来源: https://codeday.me/bug/20191012/1901072.html