Utils: Make TreeViews use setUniformRowHeights by default

When applicable, the flag makes a significant difference in
performacnce. However is easily forgotten in cases where it
is applicable, and cases where it is accidentally used are
easily spotted visually. So arguably, opt-out is a better
default than opt-in.

Change-Id: I88aeb05b42533ba4e23c39573a3ddd016343cd55
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2023-08-22 09:22:46 +02:00
parent b9188fb747
commit a475632c66
27 changed files with 41 additions and 36 deletions

View File

@@ -46,6 +46,7 @@ WorkspaceView::WorkspaceView(DockManager *manager, QWidget *parent)
, m_manager(manager) , m_manager(manager)
, m_workspaceModel(manager) , m_workspaceModel(manager)
{ {
setUniformRowHeights(false);
setItemDelegate(new RemoveItemFocusDelegate(this)); setItemDelegate(new RemoveItemFocusDelegate(this));
setSelectionBehavior(QAbstractItemView::SelectRows); setSelectionBehavior(QAbstractItemView::SelectRows);
setSelectionMode(QAbstractItemView::SingleSelection); setSelectionMode(QAbstractItemView::SingleSelection);

View File

@@ -275,7 +275,6 @@ PluginView::PluginView(QWidget *parent)
m_categoryView = new TreeView(this); m_categoryView = new TreeView(this);
m_categoryView->setAlternatingRowColors(true); m_categoryView->setAlternatingRowColors(true);
m_categoryView->setIndentation(20); m_categoryView->setIndentation(20);
m_categoryView->setUniformRowHeights(true);
m_categoryView->setSortingEnabled(true); m_categoryView->setSortingEnabled(true);
m_categoryView->setColumnWidth(LoadedColumn, 40); m_categoryView->setColumnWidth(LoadedColumn, 40);
m_categoryView->header()->setDefaultSectionSize(120); m_categoryView->header()->setDefaultSectionSize(120);

View File

@@ -345,7 +345,6 @@ BaseTreeView::BaseTreeView(QWidget *parent)
setRootIsDecorated(false); setRootIsDecorated(false);
setIconSize(QSize(16, 16)); setIconSize(QSize(16, 16));
setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionMode(QAbstractItemView::ExtendedSelection);
setUniformRowHeights(true);
setItemDelegate(new BaseTreeViewDelegate(this)); setItemDelegate(new BaseTreeViewDelegate(this));
setAlternatingRowColors(false); setAlternatingRowColors(false);

View File

@@ -3,6 +3,8 @@
#include "itemviews.h" #include "itemviews.h"
namespace Utils {
/*! /*!
\class Utils::TreeView \class Utils::TreeView
\inmodule QtCreator \inmodule QtCreator
@@ -12,6 +14,8 @@
platforms where the default is different. Use with care. platforms where the default is different. Use with care.
Also adds sane keyboard navigation for mac. Also adds sane keyboard navigation for mac.
Note: This uses setUniformRowHeights(true) by default.
*/ */
/*! /*!
@@ -23,6 +27,8 @@
platforms where the default is different. Use with care. platforms where the default is different. Use with care.
Also adds sane keyboard navigation for mac. Also adds sane keyboard navigation for mac.
Note: This uses setUniformRowHeights(true) by default.
*/ */
/*! /*!
@@ -46,3 +52,25 @@
Also adds sane keyboard navigation for mac. Also adds sane keyboard navigation for mac.
*/ */
TreeView::TreeView(QWidget *parent)
: View<QTreeView>(parent)
{
setUniformRowHeights(true);
}
TreeWidget::TreeWidget(QWidget *parent)
: View<QTreeWidget>(parent)
{
setUniformRowHeights(true);
}
ListView::ListView(QWidget *parent)
: View<QListView>(parent)
{}
ListWidget::ListWidget(QWidget *parent)
: View<QListWidget>(parent)
{}
} // Utils

View File

@@ -64,33 +64,25 @@ public:
class QTCREATOR_UTILS_EXPORT TreeView : public View<QTreeView> class QTCREATOR_UTILS_EXPORT TreeView : public View<QTreeView>
{ {
public: public:
TreeView(QWidget *parent = nullptr) TreeView(QWidget *parent = nullptr);
: View<QTreeView>(parent)
{}
}; };
class QTCREATOR_UTILS_EXPORT TreeWidget : public View<QTreeWidget> class QTCREATOR_UTILS_EXPORT TreeWidget : public View<QTreeWidget>
{ {
public: public:
TreeWidget(QWidget *parent = nullptr) TreeWidget(QWidget *parent = nullptr);
: View<QTreeWidget>(parent)
{}
}; };
class QTCREATOR_UTILS_EXPORT ListView : public View<QListView> class QTCREATOR_UTILS_EXPORT ListView : public View<QListView>
{ {
public: public:
ListView(QWidget *parent = nullptr) ListView(QWidget *parent = nullptr);
: View<QListView>(parent)
{}
}; };
class QTCREATOR_UTILS_EXPORT ListWidget : public View<QListWidget> class QTCREATOR_UTILS_EXPORT ListWidget : public View<QListWidget>
{ {
public: public:
ListWidget(QWidget *parent = nullptr) ListWidget(QWidget *parent = nullptr);
: View<QListWidget>(parent)
{}
}; };
} // Utils } // Utils

View File

@@ -25,7 +25,6 @@ NavigationTreeView::NavigationTreeView(QWidget *parent)
{ {
setFrameStyle(QFrame::NoFrame); setFrameStyle(QFrame::NoFrame);
setIndentation(indentation() * 7/10); setIndentation(indentation() * 7/10);
setUniformRowHeights(true);
setTextElideMode(Qt::ElideNone); setTextElideMode(Qt::ElideNone);
setAttribute(Qt::WA_MacShowFocusRect, false); setAttribute(Qt::WA_MacShowFocusRect, false);

View File

@@ -56,6 +56,7 @@ namespace Internal {
ResultsTreeView::ResultsTreeView(QWidget *parent) ResultsTreeView::ResultsTreeView(QWidget *parent)
: TreeView(parent) : TreeView(parent)
{ {
setUniformRowHeights(false);
setAttribute(Qt::WA_MacShowFocusRect, false); setAttribute(Qt::WA_MacShowFocusRect, false);
setFrameStyle(NoFrame); setFrameStyle(NoFrame);
} }

View File

@@ -264,6 +264,7 @@ void DeviceSelectionMemoryModel::refresh()
DeviceSelectionMemoryView::DeviceSelectionMemoryView(DeviceSelection &selection, QWidget *parent) DeviceSelectionMemoryView::DeviceSelectionMemoryView(DeviceSelection &selection, QWidget *parent)
: TreeView(parent) : TreeView(parent)
{ {
setUniformRowHeights(false);
setRootIsDecorated(true); setRootIsDecorated(true);
setSelectionMode(QAbstractItemView::SingleSelection); setSelectionMode(QAbstractItemView::SingleSelection);

View File

@@ -246,7 +246,6 @@ CMakeBuildSettingsWidget::CMakeBuildSettingsWidget(CMakeBuildConfiguration *bc)
m_configView->setModel(m_configTextFilterModel); m_configView->setModel(m_configTextFilterModel);
m_configView->setMinimumHeight(300); m_configView->setMinimumHeight(300);
m_configView->setUniformRowHeights(true);
m_configView->setSortingEnabled(true); m_configView->setSortingEnabled(true);
m_configView->sortByColumn(0, Qt::AscendingOrder); m_configView->sortByColumn(0, Qt::AscendingOrder);
m_configView->header()->setSectionResizeMode(QHeaderView::Stretch); m_configView->header()->setSectionResizeMode(QHeaderView::Stretch);

View File

@@ -44,7 +44,6 @@ SearchResultTreeView::SearchResultTreeView(QWidget *parent)
setItemDelegate(new SearchResultTreeItemDelegate(8, this)); setItemDelegate(new SearchResultTreeItemDelegate(8, this));
setIndentation(14); setIndentation(14);
setUniformRowHeights(true);
setExpandsOnDoubleClick(true); setExpandsOnDoubleClick(true);
header()->setSectionResizeMode(QHeaderView::ResizeToContents); header()->setSectionResizeMode(QHeaderView::ResizeToContents);
header()->setStretchLastSection(false); header()->setStretchLastSection(false);

View File

@@ -277,6 +277,7 @@ public:
filterEdit->setFiltering(true); filterEdit->setFiltering(true);
m_filterList = new TreeView; m_filterList = new TreeView;
m_filterList->setUniformRowHeights(false);
m_filterList->setSelectionMode(QAbstractItemView::SingleSelection); m_filterList->setSelectionMode(QAbstractItemView::SingleSelection);
m_filterList->setSelectionBehavior(QAbstractItemView::SelectRows); m_filterList->setSelectionBehavior(QAbstractItemView::SelectRows);
m_filterList->setSortingEnabled(true); m_filterList->setSortingEnabled(true);

View File

@@ -250,7 +250,6 @@ CompletionList::CompletionList(QWidget *parent)
setItemDelegate(new CompletionDelegate(this)); setItemDelegate(new CompletionDelegate(this));
setRootIsDecorated(false); setRootIsDecorated(false);
setUniformRowHeights(true);
header()->hide(); header()->hide();
header()->setStretchLastSection(true); header()->setStretchLastSection(true);
// This is too slow when done on all results // This is too slow when done on all results

View File

@@ -81,7 +81,6 @@ OpenDocumentsTreeView::OpenDocumentsTreeView(QWidget *parent) :
m_delegate = new Internal::OpenDocumentsDelegate(this); m_delegate = new Internal::OpenDocumentsDelegate(this);
setItemDelegate(m_delegate); setItemDelegate(m_delegate);
setRootIsDecorated(false); setRootIsDecorated(false);
setUniformRowHeights(true);
setTextElideMode(Qt::ElideMiddle); setTextElideMode(Qt::ElideMiddle);
setFrameStyle(QFrame::NoFrame); setFrameStyle(QFrame::NoFrame);
setAttribute(Qt::WA_MacShowFocusRect, false); setAttribute(Qt::WA_MacShowFocusRect, false);

View File

@@ -36,6 +36,7 @@ void RemoveItemFocusDelegate::paint(QPainter* painter, const QStyleOptionViewIte
SessionView::SessionView(QWidget *parent) SessionView::SessionView(QWidget *parent)
: Utils::TreeView(parent) : Utils::TreeView(parent)
{ {
setUniformRowHeights(false);
setItemDelegate(new RemoveItemFocusDelegate(this)); setItemDelegate(new RemoveItemFocusDelegate(this));
setSelectionBehavior(QAbstractItemView::SelectRows); setSelectionBehavior(QAbstractItemView::SelectRows);
setSelectionMode(QAbstractItemView::ExtendedSelection); setSelectionMode(QAbstractItemView::ExtendedSelection);

View File

@@ -28,7 +28,6 @@ CtfStatisticsView::CtfStatisticsView(CtfStatisticsModel *model, QWidget *parent)
header()->setStretchLastSection(false); header()->setStretchLastSection(false);
header()->setSectionResizeMode(CtfStatisticsModel::Column::Title, QHeaderView::Stretch); header()->setSectionResizeMode(CtfStatisticsModel::Column::Title, QHeaderView::Stretch);
setRootIsDecorated(false); setRootIsDecorated(false);
setUniformRowHeights(true);
setSortingEnabled(true); setSortingEnabled(true);
connect(selectionModel(), &QItemSelectionModel::currentChanged, this, connect(selectionModel(), &QItemSelectionModel::currentChanged, this,

View File

@@ -32,6 +32,7 @@ namespace Internal {
ConsoleView::ConsoleView(ConsoleItemModel *model, QWidget *parent) : ConsoleView::ConsoleView(ConsoleItemModel *model, QWidget *parent) :
Utils::TreeView(parent), m_model(model) Utils::TreeView(parent), m_model(model)
{ {
setUniformRowHeights(false);
setFrameStyle(QFrame::NoFrame); setFrameStyle(QFrame::NoFrame);
setHeaderHidden(true); setHeaderHidden(true);
setRootIsDecorated(false); setRootIsDecorated(false);

View File

@@ -82,7 +82,6 @@ GerritDialog::GerritDialog(const QSharedPointer<GerritParameters> &p,
m_treeView = new TreeView(changesGroup); m_treeView = new TreeView(changesGroup);
m_treeView->setMinimumSize(QSize(600, 0)); m_treeView->setMinimumSize(QSize(600, 0));
m_treeView->setRootIsDecorated(false); m_treeView->setRootIsDecorated(false);
m_treeView->setUniformRowHeights(true);
m_treeView->setSortingEnabled(true); m_treeView->setSortingEnabled(true);
auto detailsGroup = new QGroupBox(Git::Tr::tr("Details")); auto detailsGroup = new QGroupBox(Git::Tr::tr("Details"));

View File

@@ -71,7 +71,6 @@ LogChangeWidget::LogChangeWidget(QWidget *parent)
m_model->setHorizontalHeaderLabels(headers); m_model->setHorizontalHeaderLabels(headers);
setModel(m_model); setModel(m_model);
setMinimumWidth(300); setMinimumWidth(300);
setUniformRowHeights(true);
setRootIsDecorated(false); setRootIsDecorated(false);
setSelectionBehavior(QAbstractItemView::SelectRows); setSelectionBehavior(QAbstractItemView::SelectRows);
setActivationMode(Utils::DoubleClickActivation); setActivationMode(Utils::DoubleClickActivation);

View File

@@ -132,7 +132,6 @@ StashDialog::StashDialog(QWidget *parent) : QDialog(parent),
m_stashView->setModel(m_proxyModel); m_stashView->setModel(m_proxyModel);
m_stashView->setSelectionMode(QAbstractItemView::ExtendedSelection); m_stashView->setSelectionMode(QAbstractItemView::ExtendedSelection);
m_stashView->setAllColumnsShowFocus(true); m_stashView->setAllColumnsShowFocus(true);
m_stashView->setUniformRowHeights(true);
m_stashView->setFocus(); m_stashView->setFocus();
using namespace Layouting; using namespace Layouting;

View File

@@ -185,7 +185,6 @@ public:
optionsTreeView->setMinimumHeight(300); optionsTreeView->setMinimumHeight(300);
optionsTreeView->setFrameShape(QFrame::NoFrame); optionsTreeView->setFrameShape(QFrame::NoFrame);
optionsTreeView->setSelectionBehavior(QAbstractItemView::SelectItems); optionsTreeView->setSelectionBehavior(QAbstractItemView::SelectItems);
optionsTreeView->setUniformRowHeights(true);
optionsTreeView->setSortingEnabled(true); optionsTreeView->setSortingEnabled(true);
using namespace Layouting; using namespace Layouting;

View File

@@ -95,10 +95,7 @@ private:
class CandidatesTreeView : public TreeView class CandidatesTreeView : public TreeView
{ {
public: public:
CandidatesTreeView(QWidget *parent) : TreeView(parent) CandidatesTreeView(QWidget *parent) : TreeView(parent) {}
{
setUniformRowHeights(true);
}
private: private:
QSize sizeHint() const override QSize sizeHint() const override

View File

@@ -121,7 +121,6 @@ DeviceProcessesDialogPrivate::DeviceProcessesDialogPrivate(KitChooser *chooser,
procView->setModel(&proxyModel); procView->setModel(&proxyModel);
procView->setSelectionBehavior(QAbstractItemView::SelectRows); procView->setSelectionBehavior(QAbstractItemView::SelectRows);
procView->setSelectionMode(QAbstractItemView::SingleSelection); procView->setSelectionMode(QAbstractItemView::SingleSelection);
procView->setUniformRowHeights(true);
procView->setRootIsDecorated(false); procView->setRootIsDecorated(false);
procView->setAlternatingRowColors(true); procView->setAlternatingRowColors(true);
procView->setSortingEnabled(true); procView->setSortingEnabled(true);

View File

@@ -212,7 +212,6 @@ EnvironmentWidget::EnvironmentWidget(QWidget *parent, Type type, QWidget *additi
d->m_environmentView->setItemDelegate(new EnvironmentDelegate(d->m_model, d->m_environmentView)); d->m_environmentView->setItemDelegate(new EnvironmentDelegate(d->m_model, d->m_environmentView));
d->m_environmentView->setMinimumHeight(400); d->m_environmentView->setMinimumHeight(400);
d->m_environmentView->setRootIsDecorated(false); d->m_environmentView->setRootIsDecorated(false);
d->m_environmentView->setUniformRowHeights(true);
const auto stretcher = new HeaderViewStretcher(d->m_environmentView->header(), 1); const auto stretcher = new HeaderViewStretcher(d->m_environmentView->header(), 1);
connect(d->m_model, &QAbstractItemModel::dataChanged, connect(d->m_model, &QAbstractItemModel::dataChanged,
stretcher, &HeaderViewStretcher::softStretch); stretcher, &HeaderViewStretcher::softStretch);

View File

@@ -113,10 +113,7 @@ public:
class FilterTreeView : public TreeView class FilterTreeView : public TreeView
{ {
public: public:
FilterTreeView(QWidget *parent) : TreeView(parent) FilterTreeView(QWidget *parent) : TreeView(parent) {}
{
setUniformRowHeights(true);
}
private: private:
QSize sizeHint() const override QSize sizeHint() const override

View File

@@ -488,7 +488,6 @@ SelectorView::SelectorView(QWidget *parent) : TreeView(parent)
setFocusPolicy(Qt::NoFocus); setFocusPolicy(Qt::NoFocus);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setAlternatingRowColors(false); setAlternatingRowColors(false);
setUniformRowHeights(true);
setIndentation(0); setIndentation(0);
setFocusPolicy(Qt::WheelFocus); setFocusPolicy(Qt::WheelFocus);
setItemDelegate(new TargetSelectorDelegate(this)); setItemDelegate(new TargetSelectorDelegate(this));

View File

@@ -16,7 +16,6 @@ AssetImportUpdateTreeView::AssetImportUpdateTreeView(QWidget *parent)
{ {
setModel(m_model); setModel(m_model);
setItemDelegate(new AssetImportUpdateTreeItemDelegate(this)); setItemDelegate(new AssetImportUpdateTreeItemDelegate(this));
setUniformRowHeights(true);
setExpandsOnDoubleClick(true); setExpandsOnDoubleClick(true);
header()->hide(); header()->hide();
} }

View File

@@ -118,6 +118,7 @@ void Quick3DFrameView::onVisibleFeaturesChanged(quint64)
Quick3DMainView::Quick3DMainView(Quick3DFrameModel *model, bool compareView, QWidget *parent) Quick3DMainView::Quick3DMainView(Quick3DFrameModel *model, bool compareView, QWidget *parent)
: Utils::TreeView(parent), m_model(model), m_compareView(compareView) : Utils::TreeView(parent), m_model(model), m_compareView(compareView)
{ {
setUniformRowHeights(false);
setObjectName("Quick3DMainView"); setObjectName("Quick3DMainView");
setFrameStyle(QFrame::NoFrame); setFrameStyle(QFrame::NoFrame);
QHeaderView *h = header(); QHeaderView *h = header();