forked from qt-creator/qt-creator
Core: Delay creation of settings page widgets
... until they are actually shown. Change-Id: Ibf47fe57c69557f9c514cc5a7c7c8aff369b1324 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -331,14 +331,26 @@ public:
|
||||
class SmartScrollArea : public QScrollArea
|
||||
{
|
||||
public:
|
||||
explicit SmartScrollArea(QWidget *parent)
|
||||
: QScrollArea(parent)
|
||||
explicit SmartScrollArea(QWidget *parent, IOptionsPage *page)
|
||||
: QScrollArea(parent), m_page(page)
|
||||
{
|
||||
setFrameStyle(QFrame::NoFrame | QFrame::Plain);
|
||||
viewport()->setAutoFillBackground(false);
|
||||
setWidgetResizable(true);
|
||||
}
|
||||
|
||||
private:
|
||||
void showEvent(QShowEvent *event) final
|
||||
{
|
||||
if (!widget()) {
|
||||
QWidget *inner = m_page->widget();
|
||||
setWidget(inner);
|
||||
inner->setAutoFillBackground(false);
|
||||
}
|
||||
|
||||
QScrollArea::showEvent(event);
|
||||
}
|
||||
|
||||
void resizeEvent(QResizeEvent *event) final
|
||||
{
|
||||
QWidget *inner = widget();
|
||||
@@ -387,6 +399,8 @@ private:
|
||||
return 0;
|
||||
return list.first()->sizeHint().width();
|
||||
}
|
||||
|
||||
IOptionsPage *m_page = nullptr;
|
||||
};
|
||||
|
||||
// ----------- SettingsDialog
|
||||
@@ -604,14 +618,8 @@ void SettingsDialog::ensureCategoryWidget(Category *category)
|
||||
m_model.ensurePages(category);
|
||||
auto tabWidget = new QTabWidget;
|
||||
tabWidget->tabBar()->setObjectName("qc_settings_main_tabbar"); // easier lookup in Squish
|
||||
for (IOptionsPage *page : std::as_const(category->pages)) {
|
||||
QWidget *widget = page->widget();
|
||||
ICore::setupScreenShooter(page->displayName(), widget);
|
||||
auto ssa = new SmartScrollArea(this);
|
||||
ssa->setWidget(widget);
|
||||
widget->setAutoFillBackground(false);
|
||||
tabWidget->addTab(ssa, page->displayName());
|
||||
}
|
||||
for (IOptionsPage *page : std::as_const(category->pages))
|
||||
tabWidget->addTab(new SmartScrollArea(this, page), page->displayName());
|
||||
|
||||
connect(tabWidget, &QTabWidget::currentChanged,
|
||||
this, &SettingsDialog::currentTabChanged);
|
||||
|
||||
Reference in New Issue
Block a user