Qt: QListView 改变 MultiSelection 选择模式的行为
Qt: QListView change behaviour of MultiSelection selection mode
我有 QListView 和 selecting 项目的 MultiSelection 选项。
listView->setSelectionMode(MultiSelection);
这正是我想要的,除了一件事。我不想在拖动 select 时出现 deselect 行为(当我拖动经过 selected 的项目时,它们会变成 unselected)。我希望拖动 selection 下方的项目始终 selected.
有没有办法改变这种行为?
更新:已启用换行,因此可以在几行中绘制项目。
要更改 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;
}
我有 QListView 和 selecting 项目的 MultiSelection 选项。
listView->setSelectionMode(MultiSelection);
这正是我想要的,除了一件事。我不想在拖动 select 时出现 deselect 行为(当我拖动经过 selected 的项目时,它们会变成 unselected)。我希望拖动 selection 下方的项目始终 selected.
有没有办法改变这种行为?
更新:已启用换行,因此可以在几行中绘制项目。
要更改 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;
}