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
|
class SmartScrollArea : public QScrollArea
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit SmartScrollArea(QWidget *parent)
|
explicit SmartScrollArea(QWidget *parent, IOptionsPage *page)
|
||||||
: QScrollArea(parent)
|
: QScrollArea(parent), m_page(page)
|
||||||
{
|
{
|
||||||
setFrameStyle(QFrame::NoFrame | QFrame::Plain);
|
setFrameStyle(QFrame::NoFrame | QFrame::Plain);
|
||||||
viewport()->setAutoFillBackground(false);
|
viewport()->setAutoFillBackground(false);
|
||||||
setWidgetResizable(true);
|
setWidgetResizable(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
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
|
void resizeEvent(QResizeEvent *event) final
|
||||||
{
|
{
|
||||||
QWidget *inner = widget();
|
QWidget *inner = widget();
|
||||||
@@ -387,6 +399,8 @@ private:
|
|||||||
return 0;
|
return 0;
|
||||||
return list.first()->sizeHint().width();
|
return list.first()->sizeHint().width();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
IOptionsPage *m_page = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------- SettingsDialog
|
// ----------- SettingsDialog
|
||||||
@@ -604,14 +618,8 @@ void SettingsDialog::ensureCategoryWidget(Category *category)
|
|||||||
m_model.ensurePages(category);
|
m_model.ensurePages(category);
|
||||||
auto tabWidget = new QTabWidget;
|
auto tabWidget = new QTabWidget;
|
||||||
tabWidget->tabBar()->setObjectName("qc_settings_main_tabbar"); // easier lookup in Squish
|
tabWidget->tabBar()->setObjectName("qc_settings_main_tabbar"); // easier lookup in Squish
|
||||||
for (IOptionsPage *page : std::as_const(category->pages)) {
|
for (IOptionsPage *page : std::as_const(category->pages))
|
||||||
QWidget *widget = page->widget();
|
tabWidget->addTab(new SmartScrollArea(this, page), page->displayName());
|
||||||
ICore::setupScreenShooter(page->displayName(), widget);
|
|
||||||
auto ssa = new SmartScrollArea(this);
|
|
||||||
ssa->setWidget(widget);
|
|
||||||
widget->setAutoFillBackground(false);
|
|
||||||
tabWidget->addTab(ssa, page->displayName());
|
|
||||||
}
|
|
||||||
|
|
||||||
connect(tabWidget, &QTabWidget::currentChanged,
|
connect(tabWidget, &QTabWidget::currentChanged,
|
||||||
this, &SettingsDialog::currentTabChanged);
|
this, &SettingsDialog::currentTabChanged);
|
||||||
|
|||||||
Reference in New Issue
Block a user