summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/widgets/dialogs/qwizard.cpp34
-rw-r--r--src/widgets/dialogs/qwizard.h10
-rw-r--r--src/widgets/widgets/qlcdnumber.cpp14
-rw-r--r--tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp6
-rw-r--r--tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp28
5 files changed, 58 insertions, 34 deletions
diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp
index e23ed9f23ee..58a4115374e 100644
--- a/src/widgets/dialogs/qwizard.cpp
+++ b/src/widgets/dialogs/qwizard.cpp
@@ -259,7 +259,7 @@ public:
void setup(const QWizardLayoutInfo &info, const QString &title,
const QString &subTitle, const QPixmap &logo, const QPixmap &banner,
Qt::TextFormat titleFormat, Qt::TextFormat subTitleFormat,
- QWizard::BannerSizePolicy bannerSizePolicy);
+ QWizard::BannerStretchPolicy bannerStretchPolicy);
protected:
void paintEvent(QPaintEvent *event) override;
@@ -273,7 +273,7 @@ private:
QLabel *logoLabel;
QGridLayout *layout;
QPixmap bannerPixmap;
- QWizard::BannerSizePolicy wizardBannerSizePolicy = QWizard::BannerSizePolicy::NoStretch;
+ QWizard::BannerStretchPolicy wizardBannerStretchPolicy = QWizard::BannerStretchPolicy::NoStretch;
};
QWizardHeader::QWizardHeader(QWidget *parent)
@@ -329,7 +329,7 @@ bool QWizardHeader::vistaDisabled() const
void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title,
const QString &subTitle, const QPixmap &logo, const QPixmap &banner,
Qt::TextFormat titleFormat, Qt::TextFormat subTitleFormat,
- QWizard::BannerSizePolicy bannerSizePolicy)
+ QWizard::BannerStretchPolicy bannerStretchPolicy)
{
bool modern = ((info.wizStyle == QWizard::ModernStyle)
#if QT_CONFIG(style_windowsvista)
@@ -337,7 +337,7 @@ void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title,
#endif
);
- wizardBannerSizePolicy = bannerSizePolicy;
+ wizardBannerStretchPolicy = bannerStretchPolicy;
layout->setRowMinimumHeight(0, modern ? ModernHeaderTopMargin : 0);
layout->setRowMinimumHeight(1, modern ? info.topLevelMarginTop - ModernHeaderTopMargin - 1 : 0);
@@ -364,7 +364,7 @@ void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title,
bannerPixmap = QPixmap();
}
- if (bannerPixmap.isNull() || wizardBannerSizePolicy != QWizard::BannerSizePolicy::NoStretch) {
+ if (bannerPixmap.isNull() || wizardBannerStretchPolicy != QWizard::BannerStretchPolicy::NoStretch) {
/*
There is no widthForHeight() function, so we simulate it with a loop.
*/
@@ -392,12 +392,12 @@ void QWizardHeader::setup(const QWizardLayoutInfo &info, const QString &title,
void QWizardHeader::paintEvent(QPaintEvent * /* event */)
{
QStylePainter painter(this);
- switch (wizardBannerSizePolicy) {
- case QWizard::BannerSizePolicy::Stretch:
+ switch (wizardBannerStretchPolicy) {
+ case QWizard::BannerStretchPolicy::Stretch:
painter.setRenderHint(QPainter::SmoothPixmapTransform);
painter.drawPixmap(0, 0, width(), height(), bannerPixmap);
break;
- case QWizard::BannerSizePolicy::NoStretch:
+ case QWizard::BannerStretchPolicy::NoStretch:
painter.drawPixmap(0, 0, bannerPixmap);
break;
}
@@ -582,7 +582,7 @@ public:
QList<QWizard::WizardButton> buttonsCustomLayout;
Qt::TextFormat titleFmt = Qt::AutoText;
Qt::TextFormat subTitleFmt = Qt::AutoText;
- QWizard::BannerSizePolicy bannerSizePolicy = QWizard::BannerSizePolicy::NoStretch;
+ QWizard::BannerStretchPolicy bannerStretchPolicy = QWizard::BannerStretchPolicy::NoStretch;
mutable QPixmap defaultPixmaps[QWizard::NPixmaps];
union {
@@ -1238,7 +1238,7 @@ void QWizardPrivate::updateLayout()
Q_ASSERT(page);
headerWidget->setup(info, page->title(), page->subTitle(),
page->pixmap(QWizard::LogoPixmap), page->pixmap(QWizard::BannerPixmap),
- titleFmt, subTitleFmt, bannerSizePolicy);
+ titleFmt, subTitleFmt, bannerStretchPolicy);
}
if (info.watermark || info.sideWidget) {
@@ -2097,7 +2097,7 @@ void QWizardAntiFlickerWidget::paintEvent(QPaintEvent *)
*/
/*!
- \enum QWizard::BannerSizePolicy
+ \enum QWizard::BannerStretchPolicy
This enum specifies the banner size policy when there is a banner.
@@ -2800,25 +2800,25 @@ Qt::TextFormat QWizard::subTitleFormat() const
}
/*!
- \property QWizard::bannerSizePolicy
+ \property QWizard::bannerStretchPolicy
\brief the banner size policy
The default policy is \l{QWizard::}{NoStretch}
*/
-void QWizard::setBannerSizePolicy(QWizard::BannerSizePolicy bannerSizePolicy)
+void QWizard::setBannerStretchPolicy(QWizard::BannerStretchPolicy bannerStretchPolicy)
{
Q_D(QWizard);
- if (d->bannerSizePolicy == bannerSizePolicy)
+ if (d->bannerStretchPolicy == bannerStretchPolicy)
return;
- d->bannerSizePolicy = bannerSizePolicy;
+ d->bannerStretchPolicy = bannerStretchPolicy;
d->updateLayout();
}
-QWizard::BannerSizePolicy QWizard::bannerSizePolicy() const
+QWizard::BannerStretchPolicy QWizard::bannerStretchPolicy() const
{
Q_D(const QWizard);
- return d->bannerSizePolicy;
+ return d->bannerStretchPolicy;
}
/*!
diff --git a/src/widgets/dialogs/qwizard.h b/src/widgets/dialogs/qwizard.h
index 801fd7f4ef4..a421b3ecb40 100644
--- a/src/widgets/dialogs/qwizard.h
+++ b/src/widgets/dialogs/qwizard.h
@@ -25,7 +25,7 @@ class Q_WIDGETS_EXPORT QWizard : public QDialog
Q_PROPERTY(Qt::TextFormat subTitleFormat READ subTitleFormat WRITE setSubTitleFormat)
Q_PROPERTY(int startId READ startId WRITE setStartId)
Q_PROPERTY(int currentId READ currentId WRITE setCurrentId NOTIFY currentIdChanged)
- Q_PROPERTY(BannerSizePolicy bannerSizePolicy READ bannerSizePolicy WRITE setBannerSizePolicy REVISION(6, 11))
+ Q_PROPERTY(BannerStretchPolicy bannerStretchPolicy READ bannerStretchPolicy WRITE setBannerStretchPolicy REVISION(6, 11))
public:
enum WizardButton {
@@ -62,11 +62,11 @@ public:
};
Q_ENUM(WizardStyle)
- enum class BannerSizePolicy {
+ enum class BannerStretchPolicy {
NoStretch,
Stretch,
};
- Q_ENUM(BannerSizePolicy)
+ Q_ENUM(BannerStretchPolicy)
enum WizardOption {
IndependentPages = 0x00000001,
@@ -131,8 +131,8 @@ public:
Qt::TextFormat titleFormat() const;
void setSubTitleFormat(Qt::TextFormat format);
Qt::TextFormat subTitleFormat() const;
- void setBannerSizePolicy(BannerSizePolicy bannerSizePolicy);
- QWizard::BannerSizePolicy bannerSizePolicy() const;
+ void setBannerStretchPolicy(BannerStretchPolicy bannerStretchPolicy);
+ QWizard::BannerStretchPolicy bannerStretchPolicy() const;
void setPixmap(WizardPixmap which, const QPixmap &pixmap);
QPixmap pixmap(WizardPixmap which) const;
diff --git a/src/widgets/widgets/qlcdnumber.cpp b/src/widgets/widgets/qlcdnumber.cpp
index 2c4b4e334d5..ac8e00af95e 100644
--- a/src/widgets/widgets/qlcdnumber.cpp
+++ b/src/widgets/widgets/qlcdnumber.cpp
@@ -5,6 +5,7 @@
#include "qlcdnumber.h"
#include "qbitarray.h"
+#include "qnumeric.h"
#include "qpainter.h"
#include "private/qframe_p.h"
@@ -110,22 +111,17 @@ public:
*/
-static QString int2string(int num, int base, int ndigits, bool *oflow)
+static QString int2string(int number, int base, int ndigits, bool *oflow)
{
QString s;
- bool negative;
- if (num < 0) {
- negative = true;
- num = -num;
- } else {
- negative = false;
- }
+ const bool negative = number < 0;
+ const uint num = QtPrivate::qUnsignedAbs(number);
switch(base) {
case QLCDNumber::Hex:
s = QString::asprintf("%*x", ndigits, num);
break;
case QLCDNumber::Dec:
- s = QString::asprintf("%*i", ndigits, num);
+ s = QString::asprintf("%*u", ndigits, num);
break;
case QLCDNumber::Oct:
s = QString::asprintf("%*o", ndigits, num);
diff --git a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp
index 560c725fd3f..2c14a408804 100644
--- a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp
+++ b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp
@@ -449,12 +449,12 @@ void tst_QWizard::setPixmap()
int newWidth = 1240;
wizard.resize(newWidth, 720);
QCOMPARE(wizard.width(), oldWidth);
- wizard.setBannerSizePolicy(QWizard::BannerSizePolicy::Stretch);
+ wizard.setBannerStretchPolicy(QWizard::BannerStretchPolicy::Stretch);
wizard.resize(newWidth, 720);
QCOMPARE(wizard.width(), newWidth);
- wizard.setBannerSizePolicy(QWizard::BannerSizePolicy::NoStretch);
+ wizard.setBannerStretchPolicy(QWizard::BannerStretchPolicy::NoStretch);
QCOMPARE(wizard.width(), oldWidth);
- wizard.setBannerSizePolicy(QWizard::BannerSizePolicy::Stretch);
+ wizard.setBannerStretchPolicy(QWizard::BannerStretchPolicy::Stretch);
wizard.resize(newWidth, 720);
QCOMPARE(wizard.width(), newWidth);
}
diff --git a/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp b/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp
index 8fcf9c49fe6..88e67b34a2d 100644
--- a/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp
+++ b/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp
@@ -18,6 +18,9 @@ public:
private slots:
void getSetCheck();
+
+ void displayEdgeCases_data();
+ void displayEdgeCases();
};
tst_QLCDNumber::tst_QLCDNumber()
@@ -42,5 +45,30 @@ void tst_QLCDNumber::getSetCheck()
QCOMPARE(99, obj1.digitCount()); // Range<0, 99>
}
+// Test case for undefined behavior when displaying INT_MIN
+void tst_QLCDNumber::displayEdgeCases_data()
+{
+ QTest::addColumn<int>("number");
+ QTest::addColumn<QString>("expected");
+
+ // INT_MIN previously caused UB due to -INT_MIN overflow in int2string().
+ QTest::newRow("INT_MIN") << INT_MIN << QString::number(INT_MIN);
+ QTest::newRow("INT_MAX") << INT_MAX << QString::number(INT_MAX);
+ QTest::newRow("Zero") << 0 << QStringLiteral("0");
+}
+
+void tst_QLCDNumber::displayEdgeCases()
+{
+ QFETCH(int, number);
+ QFETCH(QString, expected);
+
+ QLCDNumber lcd;
+ lcd.setDigitCount(12);
+ lcd.display(number);
+
+ QString result = QString::number(lcd.intValue());
+ QCOMPARE(result, expected);
+}
+
QTEST_MAIN(tst_QLCDNumber)
#include "tst_qlcdnumber.moc"