3

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

当我使用鼠标进行多项选择时,即通过拖动鼠标选择项目时,即使在我进行了一些重新排列操作之后,它也会在 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 区域,你会看到我清除焦点并重新绘制,但没有任何帮助。这个问题的任何解决方案?

PS:我在发布模式下运行它。

4

2 回答 2

3

利用

void QAbstractItemView::clearSelection() [slot]

清除选择

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

QItemSelectionModel * QAbstractItemView::selectionModel() const

这允许做更多的事情选择

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

另一件事 ...

#ifdef QT_NO_DEBUG

意味着释放

#ifndef QT_NO_DEBUG

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

于 2013-06-27T09:30:03.573 回答
0

使用QAbstractItemView::clearSelection函数。

如果你有子类QListView,你可以用它来调用它clearSelection();

于 2013-06-27T09:54:23.087 回答