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:
Andy Shaw 2019-09-12 15:22:24 +02:00
parent 7d73d4b9a9
commit 5aa13ea144

View File

@ -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