【问题标题】:How to clear the selection of QListView when multiple items are selected?选择多个项目时如何清除 QListView 的选择?
【发布时间】:2013-06-27 19:13:39
【问题描述】:

我正在开发一个有 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 区域,您会看到我正在清除焦点并重新绘制,但没有任何帮助。有解决这个问题的办法吗?

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

【问题讨论】:

    标签: c++ qt qt4 qlistview


    【解决方案1】:

    使用

    void QAbstractItemView::clearSelection() [slot]
    

    清除选择

    此外,所有视图都有一个可供您访问的选择模型:

    QItemSelectionModel * QAbstractItemView::selectionModel() const
    

    允许做更多的事情选择

    Handling selections in item views

    另一件事...

    #ifdef QT_NO_DEBUG
    

    表示释放

    #ifndef QT_NO_DEBUG
    

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

    【讨论】:

    • 清除选择不会让我选择项目。我担心的是,当我拖动鼠标并选择设置为项目时,它会在列表视图上留下选择标记。
    • 我理解错了。但似乎不仅仅是我。也许你应该重新提出这个问题。无论如何。检查那些方法调用,我确定是错误的
    • 我试过了,但是没用。例如。当我们选择一组文件夹时,我们拖动鼠标,它会给我们一个矩形框,它覆盖了它下面的所有项目。那个特定的矩形框始终保持在 der 中。如何清除它?
    • 你知道#ifdef QT_NO_DEBUG 意味着发布模式,对吧?调试将是:#ifndef QT_NO_DEBUG。如果您将代码放入其中并使用调试进行编译,则它不会被编译...
    • 我确实提到我在发布模式下运行它:)
    【解决方案2】:

    使用QAbstractItemView::clearSelection 函数。

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

    【讨论】:

    • 感谢您的回复。清除选择不会让我选择项目。我担心的是,当我拖动鼠标并选择设置为项目时,它会在列表视图上留下选择标记。
    • @Gojira 哦,对不起,我误解了这个问题。我以为你在清除选择时遇到了问题。
    • @Gojira 顺便问一下,“选择标记”是什么意思?是突出显示的选定项目,还是焦点项目的虚线边框?我也对您的 startDrag 函数调用感到困惑。 It takes a drop action as an argument,但你给它一个位置?还是这是你自己的功能?
    • 这是我自己的功能。当我们选择一组文件夹时,我们拖动鼠标,它会给我们一个矩形框,它覆盖了它下面的所有项目。那个特定的矩形框始终保持在 der 中。
    • @Gojira 你是如何创建这个矩形框的?
    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多