From 98b1116424da972e18134bfcc9c21ed64714c07d Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 11 Jun 2020 22:21:21 +0200 Subject: [PATCH] Qt5: QDialog extension/orientation is deprecated [-Wdeprecated-declarations] --- src/Gui/FileDialog.cpp | 59 +++++++++++++++++++++++++++++++++++------- src/Gui/FileDialog.h | 4 +++ 2 files changed, 53 insertions(+), 10 deletions(-) diff --git a/src/Gui/FileDialog.cpp b/src/Gui/FileDialog.cpp index 9e5261299b..4940447a84 100644 --- a/src/Gui/FileDialog.cpp +++ b/src/Gui/FileDialog.cpp @@ -28,6 +28,7 @@ # include # include # include +# include # include # include # include @@ -463,6 +464,7 @@ void FileDialog::saveLocation(const QString& dirName) FileOptionsDialog::FileOptionsDialog( QWidget* parent, Qt::WindowFlags fl ) : QFileDialog( parent, fl ) + , extensionPos(ExtensionRight) { extensionButton = new QPushButton( this ); extensionButton->setText( tr( "Extended" ) ); @@ -471,6 +473,10 @@ FileOptionsDialog::FileOptionsDialog( QWidget* parent, Qt::WindowFlags fl ) setOption(QFileDialog::DontUseNativeDialog); #endif + // This is an alternative to add the button to the grid layout + //QDialogButtonBox* box = this->findChild(); + //box->addButton(extensionButton, QDialogButtonBox::ActionRole); + //search for the grid layout and add the new button QGridLayout* grid = this->findChild(); #if QT_VERSION >= 0x040500 @@ -546,22 +552,55 @@ void FileOptionsDialog::accept() void FileOptionsDialog::toggleExtension() { - QWidget* w = extension(); - if (w) - showExtension(!w->isVisible()); + if (extensionWidget) { + bool showIt = !extensionWidget->isVisible(); + if (showIt) { + oldSize = size(); + QSize s(extensionWidget->sizeHint() + .expandedTo(extensionWidget->minimumSize()) + .boundedTo(extensionWidget->maximumSize())); + if (extensionPos == ExtensionRight) { + setFixedSize(width() + s.width(), height()); + } + else { + setFixedSize(width(), height() + s.height()); + } + + extensionWidget->show(); + } + else { + extensionWidget->hide(); + setFixedSize(oldSize); + } + } } void FileOptionsDialog::setOptionsWidget(FileOptionsDialog::ExtensionPosition pos, QWidget* w, bool show) { - if (pos == ExtensionRight) { - setExtension(w); - setOrientation(Qt::Horizontal); + extensionPos = pos; + extensionWidget = w; + if (extensionWidget->parentWidget() != this) + extensionWidget->setParent(this); + + QGridLayout* grid = this->findChild(); + + if (extensionPos == ExtensionRight) { + int cols = grid->columnCount(); + grid->addWidget(extensionWidget, 0, cols, -1, -1); + setMinimumHeight(extensionWidget->height()); } - else if (pos == ExtensionBottom) { - setExtension(w); - setOrientation(Qt::Vertical); + else if (extensionPos == ExtensionBottom) { + int rows = grid->rowCount(); + grid->addWidget(extensionWidget, rows, 0, -1, -1); + setMinimumWidth(extensionWidget->width()); } + // Instead of resizing the dialog we can fix the layout size. + // This however, doesn't work nicely when the extension widget + // is higher/wider than the dialog. + //grid->setSizeConstraint(QLayout::SetFixedSize); + + oldSize = size(); w->hide(); if (show) toggleExtension(); @@ -569,7 +608,7 @@ void FileOptionsDialog::setOptionsWidget(FileOptionsDialog::ExtensionPosition po QWidget* FileOptionsDialog::getOptionsWidget() const { - return this->extension(); + return extensionWidget; } // ====================================================================== diff --git a/src/Gui/FileDialog.h b/src/Gui/FileDialog.h index a9602e06b2..61dd6ecf2c 100644 --- a/src/Gui/FileDialog.h +++ b/src/Gui/FileDialog.h @@ -28,6 +28,7 @@ #include #include #include +#include class QButtonGroup; class QGridLayout; @@ -105,7 +106,10 @@ protected Q_SLOTS: void toggleExtension(); private: + QSize oldSize; + ExtensionPosition extensionPos; QPushButton* extensionButton; + QPointer extensionWidget; }; // ----------------------------------------------------------------------