QTreeWidget: Don't assume the selected indexes include the first column
If the first column is hidden in a QTreeWidget then when doing a drag then the selected indexes will not include any that have a column of 0. Therefore it has to account for this use std::unique to ensure that there is only one instance of the selected items represented by the selected indexes. Fixes: QTBUG-35511 Change-Id: I39dff596959f30db7378ff946735ee2866778524 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
This commit is contained in:
parent
7d73d4b9a9
commit
5aa13ea144
@ -748,11 +748,14 @@ QMimeData *QTreeModel::internalMimeData() const
|
||||
|
||||
QMimeData *QTreeModel::mimeData(const QModelIndexList &indexes) const
|
||||
{
|
||||
QList<QTreeWidgetItem*> items;
|
||||
for (const auto &index : indexes) {
|
||||
if (index.column() == 0) // only one item per row
|
||||
items << item(index);
|
||||
}
|
||||
QList<QTreeWidgetItem *> items;
|
||||
std::transform(indexes.begin(), indexes.end(), std::back_inserter(items),
|
||||
[this](const QModelIndex &idx) -> QTreeWidgetItem * { return item(idx); });
|
||||
|
||||
// Ensure we only have one item as an item may have more than
|
||||
// one index selected if there is more than one column
|
||||
std::sort(items.begin(), items.end());
|
||||
items.erase(std::unique(items.begin(), items.end()), items.end());
|
||||
|
||||
// cachedIndexes is a little hack to avoid copying from QModelIndexList to
|
||||
// QList<QTreeWidgetItem*> and back again in the view
|
||||
|
Loading…
x
Reference in New Issue
Block a user