Qt:QListView改变MultiSelection选择模式的行为

时间:2015-08-12 12:38:34

标签: c++ qt qlistview

我有带有MultiSelection选项的QListView用于选择项目。

listView->setSelectionMode(MultiSelection);

除了一件事,这正是我想要的。我不希望在拖动选择上取消选择行为(当我拖动选定的项目时,它们将被取消选中)。我希望始终选择拖动选择下方的项目。

有没有办法改变这种行为?

更新:已启用环绕功能,因此项目会被绘制成几行。

1 个答案:

答案 0 :(得分:2)

要更改QListView的选择行为,您应该重新实现QAbstractItemView::selectionCommand功能。这是一个例子:

mylistwidget.h

#ifndef MYLISTWIDGET_H
#define MYLISTWIDGET_H

#include <QListWidget>
#include <QItemSelectionModel>

class MyListWidget : public QListWidget
{
    Q_OBJECT
public:
    explicit MyListWidget(QWidget *parent = 0);

protected:
    virtual QItemSelectionModel::SelectionFlags selectionCommand(const QModelIndex &index,
                                                                 const QEvent *event = 0) const;
};

#endif // MYLISTWIDGET_H

mylistwidget.cpp

MyListWidget::MyListWidget(QWidget *parent) :
    QListWidget(parent)
{
}

QItemSelectionModel::SelectionFlags MyListWidget::selectionCommand(const QModelIndex & index, const QEvent * event) const
{
    QItemSelectionModel::SelectionFlags flags = QAbstractItemView::selectionCommand(index, event);

    if (event->type() == QEvent::MouseMove)
    {
        flags &= ~QItemSelectionModel::Toggle;
        flags |= QItemSelectionModel::Select;
    }

    return flags;
}