C++ Qt:QListView更改多重选择选择模式的行为
我有QListView和MultiSelection选项来选择项目C++ Qt:QListView更改多重选择选择模式的行为,c++,qt,qlistview,C++,Qt,Qlistview,我有QListView和MultiSelection选项来选择项目 listView->setSelectionMode(MultiSelection); 这正是我想要的,除了一件事。我不希望在拖动选择时出现取消选择行为(当我拖动选定项时,它们将变为未选中)。我希望拖动选择下方的项目始终处于选中状态 有没有办法改变这种行为 更新:已启用换行功能,以便在几行中绘制项目。要更改QListView的选择行为,应重新实现QAbstractItemView::selectionCommand功能。
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
我忘了告诉你包装是启用的,所以项目被画成几行。但我也不确定这是否有效,因为此解决方案会选择光标正上方的项目,当光标移动到下一个项目时,所选项目将再次取消选择。您是说
wordWrap
?因为这适用于wordWrap=true
。如果使用listWidget->setSelectionMode(MultiSelection)启用多重选择,则不会取消选择上一项代码>。我应该把它添加到代码中。不,我的意思是:listView->setWrapping(true);那么您正在IconMode
中使用QListView?是的。这些是我的QListView调整:setDragDropMode(DragDrop);设置选择模式(多重选择);设置移动(自由);设置流量(左向右);setWrapping(真);setResizeMode(调整);setViewMode(IconMode);setSelectionRectVisible(真);setFocusPolicy(Qt::NoFocus);
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;
}