diff --git a/src/qt/optionsdialog.cpp b/src/qt/optionsdialog.cpp index 1d43cf7fde..68cc106722 100644 --- a/src/qt/optionsdialog.cpp +++ b/src/qt/optionsdialog.cpp @@ -45,6 +45,8 @@ #include #include #include +#include +#include #include #include #include @@ -53,6 +55,36 @@ #include #include +ModScrollArea::ModScrollArea() +{ + setWidgetResizable(true); + setFrameShape(QFrame::NoFrame); + setObjectName(QStringLiteral("scroll")); + setStyleSheet("QScrollArea#scroll, QScrollArea#scroll > QWidget > QWidget { background: transparent; } QScrollArea#scroll > QWidget > QScrollBar { background: palette(base); }"); +} + +ModScrollArea *ModScrollArea::fromWidget(QWidget * const parent, QWidget * const o) +{ + auto * const scroll = new ModScrollArea; + scroll->setWidget(o); + return scroll; +} + +QSize ModScrollArea::minimumSizeHint() const +{ + auto w = widget()->minimumSizeHint().width(); + w += verticalScrollBar()->sizeHint().width(); + const auto h = fontMetrics().height() * 2; + return QSize(w, h); +} + +QSize ModScrollArea::sizeHint() const +{ + QSize sz = widget()->sizeHint(); + sz.rwidth() += verticalScrollBar()->sizeHint().width(); + return sz; +} + void OptionsDialog::FixTabOrder(QWidget * const o) { BitcoinAmountField * const af = qobject_cast(o); @@ -290,7 +322,7 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) QWidget * const tabFilters = new QWidget(); auto& groupBox_Spamfiltering = tabFilters; - ui->tabWidget->insertTab(ui->tabWidget->indexOf(ui->tabWindow), tabFilters, tr("Spam &filtering")); + ui->tabWidget->insertTab(ui->tabWidget->indexOf(ui->tabWindow), ModScrollArea::fromWidget(this, groupBox_Spamfiltering), tr("Spam &filtering")); QVBoxLayout * const verticalLayout_Spamfiltering = new QVBoxLayout(groupBox_Spamfiltering); rejectunknownscripts = new QCheckBox(groupBox_Spamfiltering); @@ -461,7 +493,7 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) }); - verticalLayout_Spamfiltering->addItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding)); + verticalLayout_Spamfiltering->addStretch(1); /* Mining tab */ @@ -587,6 +619,8 @@ OptionsDialog::OptionsDialog(QWidget* parent, bool enableWallet) ui->qrFont_preview->setVisible(false); #endif + adjustSize(); + GUIUtil::handleCloseWindowShortcut(this); } diff --git a/src/qt/optionsdialog.h b/src/qt/optionsdialog.h index fbf9fc82c8..a1b4c2f4e5 100644 --- a/src/qt/optionsdialog.h +++ b/src/qt/optionsdialog.h @@ -6,6 +6,7 @@ #define BITCOIN_QT_OPTIONSDIALOG_H #include +#include #include class BitcoinAmountField; @@ -26,6 +27,19 @@ class QValueComboBox; class QWidget; QT_END_NAMESPACE +/** QScrollArea, but returning reasonable size hints. + */ +class ModScrollArea : public QScrollArea { + Q_OBJECT + +public: + ModScrollArea(); + static ModScrollArea *fromWidget(QWidget *parent, QWidget *o); + + QSize minimumSizeHint() const override; + QSize sizeHint() const override; +}; + namespace Ui { class OptionsDialog; }