Mark obsolete QMessageBox members as deprecated

Those overloads have been documented as obsolete, but never been deprecated.
Add the deprecation macros to trigger warnings as of Qt 6.2.

The overloads taking a single StandardButton should not be deprecated until
Qt 7, as otherwise porting from old to new API will require an unnecessary
cast to StandardButtons for calls with only a single enum value.

The unit test explicitly tests the deprecated members, so disable warnings
there.

Fixes: QTBUG-92483
Change-Id: I283ddce4681eafda2378607f999946e56bbb777e
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
This commit is contained in:
Volker Hilsheimer 2021-04-16 10:33:56 +02:00
parent 00988adcf9
commit 83eca9a087
3 changed files with 61 additions and 19 deletions

View File

@ -2049,6 +2049,7 @@ void QMessageBoxPrivate::retranslateStrings()
#endif
}
#if QT_DEPRECATED_SINCE(6,2)
/*!
\obsolete
@ -2497,6 +2498,8 @@ void QMessageBox::setButtonText(int button, const QString &text)
addButton(QMessageBox::Ok)->setText(text);
}
}
#endif // QT_DEPRECATED_SINCE(6,2)
#if QT_CONFIG(textedit)
/*!
@ -2724,6 +2727,7 @@ void QMessageBoxPrivate::helperDone(QDialog::DialogCode code, QPlatformDialogHel
clickedButton = button;
}
#if QT_DEPRECATED_SINCE(6,2)
/*!
\obsolete
@ -2741,6 +2745,7 @@ QPixmap QMessageBox::standardIcon(Icon icon)
{
return QMessageBoxPrivate::standardIcon(icon, nullptr);
}
#endif
/*!
\typedef QMessageBox::Button

View File

@ -127,7 +127,9 @@ public:
FlagMask = 0x00000300, // obsolete
ButtonMask = ~FlagMask // obsolete
};
typedef StandardButton Button; // obsolete
#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
typedef StandardButton Button;
#endif
Q_DECLARE_FLAGS(StandardButtons, StandardButton)
Q_FLAG(StandardButtons)
@ -185,28 +187,59 @@ public:
static StandardButton information(QWidget *parent, const QString &title,
const QString &text, StandardButtons buttons = Ok,
StandardButton defaultButton = NoButton);
#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) // needed as long as we have int overloads
inline static StandardButton information(QWidget *parent, const QString &title,
const QString& text,
StandardButton button0, StandardButton button1 = NoButton)
{ return information(parent, title, text, StandardButtons(button0), button1); }
#endif
static StandardButton question(QWidget *parent, const QString &title,
const QString &text, StandardButtons buttons = StandardButtons(Yes | No),
StandardButton defaultButton = NoButton);
#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
inline static int question(QWidget *parent, const QString &title,
const QString& text,
StandardButton button0, StandardButton button1)
{ return question(parent, title, text, StandardButtons(button0), button1); }
#endif
static StandardButton warning(QWidget *parent, const QString &title,
const QString &text, StandardButtons buttons = Ok,
StandardButton defaultButton = NoButton);
#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
inline static int warning(QWidget *parent, const QString &title,
const QString& text,
StandardButton button0, StandardButton button1)
{ return warning(parent, title, text, StandardButtons(button0), button1); }
#endif
static StandardButton critical(QWidget *parent, const QString &title,
const QString &text, StandardButtons buttons = Ok,
StandardButton defaultButton = NoButton);
#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
inline static int critical(QWidget *parent, const QString &title,
const QString& text,
StandardButton button0, StandardButton button1)
{ return critical(parent, title, text, StandardButtons(button0), button1); }
#endif
static void about(QWidget *parent, const QString &title, const QString &text);
static void aboutQt(QWidget *parent, const QString &title = QString());
#if QT_DEPRECATED_SINCE(6,2)
// the following functions are obsolete:
QT_DEPRECATED_VERSION_X_6_2("Use the overload taking StandardButtons instead.")
QMessageBox(const QString &title, const QString &text, Icon icon,
int button0, int button1, int button2,
QWidget *parent = nullptr,
Qt::WindowFlags f = Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
QT_DEPRECATED_VERSION_X_6_2("Use the overload taking StandardButtons instead.")
static int information(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1 = 0, int button2 = 0);
QT_DEPRECATED_VERSION_X_6_2("Use the overload taking StandardButtons instead.")
static int information(QWidget *parent, const QString &title,
const QString& text,
const QString& button0Text,
@ -214,14 +247,12 @@ public:
const QString& button2Text = QString(),
int defaultButtonNumber = 0,
int escapeButtonNumber = -1);
inline static StandardButton information(QWidget *parent, const QString &title,
const QString& text,
StandardButton button0, StandardButton button1 = NoButton)
{ return information(parent, title, text, StandardButtons(button0), button1); }
QT_DEPRECATED_VERSION_X_6_2("Use the overload taking StandardButtons instead.")
static int question(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1 = 0, int button2 = 0);
QT_DEPRECATED_VERSION_X_6_2("Use the overload taking StandardButtons instead.")
static int question(QWidget *parent, const QString &title,
const QString& text,
const QString& button0Text,
@ -229,14 +260,12 @@ public:
const QString& button2Text = QString(),
int defaultButtonNumber = 0,
int escapeButtonNumber = -1);
inline static int question(QWidget *parent, const QString &title,
const QString& text,
StandardButton button0, StandardButton button1)
{ return question(parent, title, text, StandardButtons(button0), button1); }
QT_DEPRECATED_VERSION_X_6_2("Use the overload taking StandardButtons instead.")
static int warning(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1, int button2 = 0);
QT_DEPRECATED_VERSION_X_6_2("Use the overload taking StandardButtons instead.")
static int warning(QWidget *parent, const QString &title,
const QString& text,
const QString& button0Text,
@ -244,14 +273,12 @@ public:
const QString& button2Text = QString(),
int defaultButtonNumber = 0,
int escapeButtonNumber = -1);
inline static int warning(QWidget *parent, const QString &title,
const QString& text,
StandardButton button0, StandardButton button1)
{ return warning(parent, title, text, StandardButtons(button0), button1); }
QT_DEPRECATED_VERSION_X_6_2("Use the overload taking StandardButtons instead.")
static int critical(QWidget *parent, const QString &title,
const QString& text,
int button0, int button1, int button2 = 0);
QT_DEPRECATED_VERSION_X_6_2("Use the overload taking StandardButtons instead.")
static int critical(QWidget *parent, const QString &title,
const QString& text,
const QString& button0Text,
@ -259,13 +286,12 @@ public:
const QString& button2Text = QString(),
int defaultButtonNumber = 0,
int escapeButtonNumber = -1);
inline static int critical(QWidget *parent, const QString &title,
const QString& text,
StandardButton button0, StandardButton button1)
{ return critical(parent, title, text, StandardButtons(button0), button1); }
QT_DEPRECATED_VERSION_X_6_2("Use button() and QPushButton::text() instead.")
QString buttonText(int button) const;
QT_DEPRECATED_VERSION_X_6_2("Use addButton() instead.")
void setButtonText(int button, const QString &text);
#endif
QString informativeText() const;
void setInformativeText(const QString &text);
@ -278,8 +304,10 @@ public:
void setWindowTitle(const QString &title);
void setWindowModality(Qt::WindowModality windowModality);
#if QT_DEPRECATED_SINCE(6,2)
QT_DEPRECATED_VERSION_X_6_2("Use QStyle::standardIcon() instead.")
static QPixmap standardIcon(Icon icon);
#endif
Q_SIGNALS:
void buttonClicked(QAbstractButton *button);

View File

@ -388,6 +388,8 @@ void tst_QMessageBox::staticSourceCompat()
int ret;
// source compat tests for < 4.2
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
ExecCloseHelper closeHelper;
closeHelper.start(Qt::Key_Enter);
ret = QMessageBox::information(nullptr, "title", "text", QMessageBox::Yes, QMessageBox::No);
@ -438,10 +440,13 @@ void tst_QMessageBox::staticSourceCompat()
QCOMPARE(ret, 1);
QVERIFY(closeHelper.done());
}
QT_WARNING_POP
}
void tst_QMessageBox::instanceSourceCompat()
{
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
QMessageBox mb("Application name here",
"Saving the file will overwrite the original file on the disk.\n"
"Do you really want to save?",
@ -466,6 +471,7 @@ void tst_QMessageBox::instanceSourceCompat()
closeHelper.start(QKeyCombination(Qt::ALT | Qt::Key_Z).toCombined(), &mb);
QCOMPARE(mb.exec(), 1);
#endif
QT_WARNING_POP
}
void tst_QMessageBox::detailsText()
@ -546,8 +552,11 @@ void tst_QMessageBox::incorrectDefaultButton()
closeHelper.start(Qt::Key_Escape);
QTest::ignoreMessage(QtWarningMsg, "QDialogButtonBox::createButton: Invalid ButtonRole, button not added");
QTest::ignoreMessage(QtWarningMsg, "QDialogButtonBox::createButton: Invalid ButtonRole, button not added");
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
//do not crash here -> call old function of QMessageBox in this case
QMessageBox::question(nullptr, "", "I've been hit!",QMessageBox::Ok | QMessageBox::Cancel,QMessageBox::Save | QMessageBox::Cancel,QMessageBox::Ok);
QT_WARNING_POP
QVERIFY(closeHelper.done());
}