QListView改变MultiSelection选择模式的行为

Qt: QListView change behaviour of MultiSelection selection mode

本文关键字:模式 选择 改变 MultiSelection QListView      更新时间:2023-10-16

我有QListView与多选选项选择项目。

listView->setSelectionMode(MultiSelection);
这正是我想要的,除了一点。我不想在拖拽选择时取消选择(当我拖拽选中的项目时,它们变得未选中)。我想要拖动选择下面的项目总是被选中。

有办法改变这种行为吗?

更新:启用了换行,因此项被绘制成几行。

要改变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;
}