From 9c5e92c7141720da7238c99a1f188361e627f67f Mon Sep 17 00:00:00 2001 From: Christian Stenger Date: Tue, 8 Nov 2016 14:34:01 +0100 Subject: [PATCH] Core: Fix QModelIndex interaction for variable chooser The tree has a QSortFilterProxyModel, so we have to map the current index back to its source model to avoid using a wrong index. Change-Id: I78b6172a2c9b3d4255132e30e8eddf72dc95d5e4 Reviewed-by: hjk --- src/plugins/coreplugin/variablechooser.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/plugins/coreplugin/variablechooser.cpp b/src/plugins/coreplugin/variablechooser.cpp index 4e5a05d68e3..1fdf68512ce 100644 --- a/src/plugins/coreplugin/variablechooser.cpp +++ b/src/plugins/coreplugin/variablechooser.cpp @@ -118,6 +118,7 @@ public: VariableTreeView *m_variableTree; QLabel *m_variableDescription; + QSortFilterProxyModel *m_sortModel; QString m_defaultDescription; QByteArray m_currentVariableName; // Prevent recursive insertion of currently expanded item }; @@ -258,10 +259,10 @@ VariableChooserPrivate::VariableChooserPrivate(VariableChooser *parent) m_variableTree = new VariableTreeView(q, this); m_variableDescription = new QLabel(q); - auto sorter = new QSortFilterProxyModel(this); - sorter->setSourceModel(&m_model); - sorter->sort(0); - m_variableTree->setModel(sorter); + m_sortModel = new QSortFilterProxyModel(this); + m_sortModel->setSourceModel(&m_model); + m_sortModel->sort(0); + m_variableTree->setModel(m_sortModel); m_variableDescription->setText(m_defaultDescription); m_variableDescription->setMinimumSize(QSize(0, 60)); m_variableDescription->setAlignment(Qt::AlignLeft|Qt::AlignTop); @@ -416,7 +417,8 @@ void VariableChooser::addSupportForChildWidgets(QWidget *parent, MacroExpander * void VariableChooserPrivate::updateDescription(const QModelIndex &index) { if (m_variableDescription) - m_variableDescription->setText(m_model.data(index, Qt::ToolTipRole).toString()); + m_variableDescription->setText(m_model.data(m_sortModel->mapToSource(index), + Qt::ToolTipRole).toString()); } /*! @@ -534,7 +536,7 @@ QWidget *VariableChooserPrivate::currentWidget() */ void VariableChooserPrivate::handleItemActivated(const QModelIndex &index) { - QString text = m_model.data(index, UnexpandedTextRole).toString(); + QString text = m_model.data(m_sortModel->mapToSource(index), UnexpandedTextRole).toString(); if (!text.isEmpty()) insertText(text); }