Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当选择多个项目时,如何清除QListView的选择?_C++_Qt_Qt4_Qlistview - Fatal编程技术网

C++ 当选择多个项目时,如何清除QListView的选择?

C++ 当选择多个项目时,如何清除QListView的选择?,c++,qt,qt4,qlistview,C++,Qt,Qt4,Qlistview,我正在开发一个Qt应用程序,其中有一个QListView。列表中几乎没有项目。我的应用程序要求根据用户的选择重新排列项目。一切正常,但我面临一个小问题 当我使用鼠标进行多项选择(即通过拖动鼠标选择项目)时,即使在我执行一些重新排列操作后,它仍会在QlistView上留下选择标记。我确信这与清除选择有关。我尝试使用repaint()或clearFocus(),但似乎没有任何效果 例如,当我们选择一组文件夹时,我们拖动鼠标,intern会给我们一个矩形框,其中包含了它下面的所有项目。那个特定的矩形框

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

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

例如,当我们选择一组文件夹时,我们拖动鼠标,intern会给我们一个矩形框,其中包含了它下面的所有项目。那个特定的矩形框保留在我的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_调试区域,您将看到我清除焦点并重新绘制,但没有任何帮助。这个问题有什么解决办法吗

注意:我正在以发布模式运行它。

使用

void QAbstractItemView::clearSelection() [slot]
清除选择

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

QItemSelectionModel * QAbstractItemView::selectionModel() const
这可以让你做更多的事情

还有一件事

#ifdef QT_NO_DEBUG
意味着释放

#ifndef QT_NO_DEBUG
将是调试模式,我确信,它不会编译您粘贴的代码,请使用该函数


如果您有子类
QListView
,您可以使用
clearSelection()调用它

清除选择将不允许我选择项目。我担心的是,当我拖动鼠标并选择set to items时,它会在列表视图上留下选择标记。我理解错了。但似乎不仅仅是我。也许你应该重新表述这个问题。无论如何。检查那些方法调用,我确定是错误的,我试过了,但它不起作用。例如,当我们选择一组文件夹时,我们拖动鼠标,intern会给我们一个矩形框,其中包含了它下面的所有项目。那个特定的矩形框始终保持不变。我怎么才能清除它呢?你知道,ifdef QT#u NO#u DEBUG意味着释放模式,对吗?调试将是:#如果ndef QT_NO_调试。如果你把代码放在里面,用debug编译,它就不会被编译……我确实提到过我是在发布模式下运行的:)谢谢你的回复。清除选择将不允许我选择项目。我担心的是,当我拖动鼠标并选择“设置为项目”时,会在列表视图上留下选择标记。@Gojira哦,对不起,我误解了这个问题。我以为你在清除选择时遇到了问题。@Gojira顺便问一下,“选择标记”是什么意思?是突出显示的选定项目,还是焦点项目的虚线边框?我还对您的
startDrag
函数调用感到困惑,但你给了它一个位置?或者这是你自己的功能?这是我自己的功能。当我们选择一组文件夹时,我们拖动鼠标,intern给了我们一个矩形框,它覆盖了它下面的所有项目。那个特定的矩形框始终保持不变。@Gojira您是如何创建这个矩形框的?