Implement setDoubleStep for QInputDialog
setDoubleStep works in the same manner as for setIntStep in that it is just available for input dialogs getting a double. [ChangeLog][QtWidgets][QInputDialog] Added setDoubleStep to enable changing of the step amount for getDouble(). Task-number: QTBUG-17547 Change-Id: I5cabcfceb23324f8045f2b1e49017644418db01a Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This commit is contained in:
parent
0721199187
commit
82e6ac8cdb
@ -1367,6 +1367,41 @@ int QInputDialog::getInt(QWidget *parent, const QString &title, const QString &l
|
||||
double QInputDialog::getDouble(QWidget *parent, const QString &title, const QString &label,
|
||||
double value, double min, double max, int decimals, bool *ok,
|
||||
Qt::WindowFlags flags)
|
||||
{
|
||||
return QInputDialog::getDouble(parent, title, label, value, min, max, decimals, ok, flags, 1.0);
|
||||
}
|
||||
|
||||
/*!
|
||||
\overload
|
||||
Static convenience function to get a floating point number from the user.
|
||||
|
||||
\a title is the text which is displayed in the title bar of the dialog.
|
||||
\a label is the text which is shown to the user (it should say what should
|
||||
be entered).
|
||||
\a value is the default floating point number that the line edit will be
|
||||
set to.
|
||||
\a min and \a max are the minimum and maximum values the user may choose.
|
||||
\a decimals is the maximum number of decimal places the number may have.
|
||||
\a step is the amount by which the values change as the user presses the
|
||||
arrow buttons to increment or decrement the value.
|
||||
|
||||
If \a ok is nonnull, *\a ok will be set to true if the user pressed \uicontrol OK
|
||||
and to false if the user pressed \uicontrol Cancel. The dialog's parent is
|
||||
\a parent. The dialog will be modal and uses the widget \a flags.
|
||||
|
||||
This function returns the floating point number which has been entered by
|
||||
the user.
|
||||
|
||||
Use this static function like this:
|
||||
|
||||
\snippet dialogs/standarddialogs/dialog.cpp 1
|
||||
|
||||
\sa getText(), getInt(), getItem(), getMultiLineText()
|
||||
*/
|
||||
|
||||
double QInputDialog::getDouble(QWidget *parent, const QString &title, const QString &label,
|
||||
double value, double min, double max, int decimals, bool *ok,
|
||||
Qt::WindowFlags flags, double step)
|
||||
{
|
||||
QAutoPointer<QInputDialog> dialog(new QInputDialog(parent, flags));
|
||||
dialog->setWindowTitle(title);
|
||||
@ -1374,6 +1409,7 @@ double QInputDialog::getDouble(QWidget *parent, const QString &title, const QStr
|
||||
dialog->setDoubleDecimals(decimals);
|
||||
dialog->setDoubleRange(min, max);
|
||||
dialog->setDoubleValue(value);
|
||||
dialog->setDoubleStep(step);
|
||||
|
||||
const int ret = dialog->exec();
|
||||
if (ok)
|
||||
@ -1438,6 +1474,31 @@ QString QInputDialog::getItem(QWidget *parent, const QString &title, const QStri
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
\property QInputDialog::doubleStep
|
||||
\since 5.10
|
||||
\brief the step by which the double value is increased and decreased
|
||||
|
||||
This property is only relevant when the input dialog is used in
|
||||
DoubleInput mode.
|
||||
*/
|
||||
|
||||
void QInputDialog::setDoubleStep(double step)
|
||||
{
|
||||
Q_D(QInputDialog);
|
||||
d->ensureDoubleSpinBox();
|
||||
d->doubleSpinBox->setSingleStep(step);
|
||||
}
|
||||
|
||||
double QInputDialog::doubleStep() const
|
||||
{
|
||||
Q_D(const QInputDialog);
|
||||
if (d->doubleSpinBox)
|
||||
return d->doubleSpinBox->singleStep();
|
||||
else
|
||||
return 1.0;
|
||||
}
|
||||
|
||||
/*!
|
||||
\fn void QInputDialog::doubleValueChanged(double value)
|
||||
|
||||
|
@ -74,6 +74,7 @@ class Q_WIDGETS_EXPORT QInputDialog : public QDialog
|
||||
QDOC_PROPERTY(int doubleDecimals READ doubleDecimals WRITE setDoubleDecimals)
|
||||
QDOC_PROPERTY(QString okButtonText READ okButtonText WRITE setOkButtonText)
|
||||
QDOC_PROPERTY(QString cancelButtonText READ cancelButtonText WRITE setCancelButtonText)
|
||||
QDOC_PROPERTY(double doubleStep READ doubleStep WRITE setDoubleStep)
|
||||
|
||||
public:
|
||||
enum InputDialogOption {
|
||||
@ -178,6 +179,10 @@ public:
|
||||
static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0,
|
||||
double minValue = -2147483647, double maxValue = 2147483647,
|
||||
int decimals = 1, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
|
||||
// ### Qt 6: merge overloads
|
||||
static double getDouble(QWidget *parent, const QString &title, const QString &label, double value,
|
||||
double minValue, double maxValue, int decimals, bool *ok, Qt::WindowFlags flags,
|
||||
double step);
|
||||
|
||||
#if QT_DEPRECATED_SINCE(5, 0)
|
||||
QT_DEPRECATED static inline int getInteger(QWidget *parent, const QString &title, const QString &label, int value = 0,
|
||||
@ -188,6 +193,9 @@ public:
|
||||
}
|
||||
#endif
|
||||
|
||||
void setDoubleStep(double step);
|
||||
double doubleStep() const;
|
||||
|
||||
Q_SIGNALS:
|
||||
// ### emit signals!
|
||||
void textValueChanged(const QString &text);
|
||||
|
@ -47,6 +47,7 @@ class tst_QInputDialog : public QObject
|
||||
static void testFuncGetDouble(QInputDialog *dialog);
|
||||
static void testFuncGetText(QInputDialog *dialog);
|
||||
static void testFuncGetItem(QInputDialog *dialog);
|
||||
static void testFuncSingleStepDouble(QInputDialog *dialog);
|
||||
void timerEvent(QTimerEvent *event);
|
||||
private slots:
|
||||
void getInt_data();
|
||||
@ -61,6 +62,8 @@ private slots:
|
||||
void getItem();
|
||||
void task256299_getTextReturnNullStringOnRejected();
|
||||
void inputMethodHintsOfChildWidget();
|
||||
void setDoubleStep_data();
|
||||
void setDoubleStep();
|
||||
};
|
||||
|
||||
QString stripFraction(const QString &s)
|
||||
@ -482,5 +485,45 @@ void tst_QInputDialog::inputMethodHintsOfChildWidget()
|
||||
QCOMPARE(editWidget->inputMethodHints(), Qt::ImhDigitsOnly);
|
||||
}
|
||||
|
||||
void tst_QInputDialog::testFuncSingleStepDouble(QInputDialog *dialog)
|
||||
{
|
||||
QDoubleSpinBox *sbox = dialog->findChild<QDoubleSpinBox *>();
|
||||
QVERIFY(sbox);
|
||||
QTest::keyClick(sbox, Qt::Key_Up);
|
||||
}
|
||||
|
||||
void tst_QInputDialog::setDoubleStep_data()
|
||||
{
|
||||
QTest::addColumn<double>("min");
|
||||
QTest::addColumn<double>("max");
|
||||
QTest::addColumn<int>("decimals");
|
||||
QTest::addColumn<double>("doubleStep");
|
||||
QTest::addColumn<double>("actualResult");
|
||||
QTest::newRow("step 2.0") << 0.0 << 10.0 << 0 << 2.0 << 2.0;
|
||||
QTest::newRow("step 2.5") << 0.5 << 10.5 << 1 << 2.5 << 3.0;
|
||||
QTest::newRow("step 2.25") << 10.05 << 20.05 << 2 << 2.25 << 12.30;
|
||||
QTest::newRow("step 2.25 fewer decimals") << 0.5 << 10.5 << 1 << 2.25 << 2.75;
|
||||
}
|
||||
|
||||
void tst_QInputDialog::setDoubleStep()
|
||||
{
|
||||
QFETCH(double, min);
|
||||
QFETCH(double, max);
|
||||
QFETCH(int, decimals);
|
||||
QFETCH(double, doubleStep);
|
||||
QFETCH(double, actualResult);
|
||||
QWidget p;
|
||||
parent = &p;
|
||||
doneCode = QDialog::Accepted;
|
||||
testFunc = &tst_QInputDialog::testFuncSingleStepDouble;
|
||||
startTimer(0);
|
||||
bool ok = false;
|
||||
const double result = QInputDialog::getDouble(parent, QString(), QString(), min, min,
|
||||
max, decimals, &ok, QFlags<Qt::WindowType>(),
|
||||
doubleStep);
|
||||
QVERIFY(ok);
|
||||
QCOMPARE(result, actualResult);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QInputDialog)
|
||||
#include "tst_qinputdialog.moc"
|
||||
|
Loading…
Reference in New Issue
Block a user