Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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++ Qt:QListView更改多重选择选择模式的行为_C++_Qt_Qlistview - Fatal编程技术网

C++ Qt:QListView更改多重选择选择模式的行为

C++ Qt:QListView更改多重选择选择模式的行为,c++,qt,qlistview,C++,Qt,Qlistview,我有QListView和MultiSelection选项来选择项目 listView->setSelectionMode(MultiSelection); 这正是我想要的,除了一件事。我不希望在拖动选择时出现取消选择行为(当我拖动选定项时,它们将变为未选中)。我希望拖动选择下方的项目始终处于选中状态 有没有办法改变这种行为 更新:已启用换行功能,以便在几行中绘制项目。要更改QListView的选择行为,应重新实现QAbstractItemView::selectionCommand功能。

我有QListView和MultiSelection选项来选择项目

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;
}