AbstractItemView editorForIndex/indexForEditor speedup

Frequent calls to editorForIndex/indexForEditor are very slow because of an implicit
conversion from QModelIndex to QPersistentModelIndex.
This fix allows to avoid unnecessary conversions when there are no open
editors (most common case)

Change-Id: Ic072880c9f33a43a20b2a61a42c3ba215c5c33cb
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
This commit is contained in:
ABBAPOH 2012-06-09 16:22:50 +04:00 committed by Qt by Nokia
parent e2f57d59d8
commit 1d859ef805

View File

@ -4196,6 +4196,10 @@ const QEditorInfo & QAbstractItemViewPrivate::editorForIndex(const QModelIndex &
{ {
static QEditorInfo nullInfo; static QEditorInfo nullInfo;
// do not try to search to avoid slow implicit cast from QModelIndex to QPersistentModelIndex
if (indexEditorHash.isEmpty())
return nullInfo;
QIndexEditorHash::const_iterator it = indexEditorHash.find(index); QIndexEditorHash::const_iterator it = indexEditorHash.find(index);
if (it == indexEditorHash.end()) if (it == indexEditorHash.end())
return nullInfo; return nullInfo;
@ -4205,6 +4209,10 @@ const QEditorInfo & QAbstractItemViewPrivate::editorForIndex(const QModelIndex &
QModelIndex QAbstractItemViewPrivate::indexForEditor(QWidget *editor) const QModelIndex QAbstractItemViewPrivate::indexForEditor(QWidget *editor) const
{ {
// do not try to search to avoid slow implicit cast from QModelIndex to QPersistentModelIndex
if (indexEditorHash.isEmpty())
return QModelIndex();
QEditorIndexHash::const_iterator it = editorIndexHash.find(editor); QEditorIndexHash::const_iterator it = editorIndexHash.find(editor);
if (it == editorIndexHash.end()) if (it == editorIndexHash.end())
return QModelIndex(); return QModelIndex();