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 QInputDialog::getDouble(QWidget *parent, const QString &title, const QString &label,
|
||||||
double value, double min, double max, int decimals, bool *ok,
|
double value, double min, double max, int decimals, bool *ok,
|
||||||
Qt::WindowFlags flags)
|
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));
|
QAutoPointer<QInputDialog> dialog(new QInputDialog(parent, flags));
|
||||||
dialog->setWindowTitle(title);
|
dialog->setWindowTitle(title);
|
||||||
@ -1374,6 +1409,7 @@ double QInputDialog::getDouble(QWidget *parent, const QString &title, const QStr
|
|||||||
dialog->setDoubleDecimals(decimals);
|
dialog->setDoubleDecimals(decimals);
|
||||||
dialog->setDoubleRange(min, max);
|
dialog->setDoubleRange(min, max);
|
||||||
dialog->setDoubleValue(value);
|
dialog->setDoubleValue(value);
|
||||||
|
dialog->setDoubleStep(step);
|
||||||
|
|
||||||
const int ret = dialog->exec();
|
const int ret = dialog->exec();
|
||||||
if (ok)
|
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)
|
\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(int doubleDecimals READ doubleDecimals WRITE setDoubleDecimals)
|
||||||
QDOC_PROPERTY(QString okButtonText READ okButtonText WRITE setOkButtonText)
|
QDOC_PROPERTY(QString okButtonText READ okButtonText WRITE setOkButtonText)
|
||||||
QDOC_PROPERTY(QString cancelButtonText READ cancelButtonText WRITE setCancelButtonText)
|
QDOC_PROPERTY(QString cancelButtonText READ cancelButtonText WRITE setCancelButtonText)
|
||||||
|
QDOC_PROPERTY(double doubleStep READ doubleStep WRITE setDoubleStep)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
enum InputDialogOption {
|
enum InputDialogOption {
|
||||||
@ -178,6 +179,10 @@ public:
|
|||||||
static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0,
|
static double getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0,
|
||||||
double minValue = -2147483647, double maxValue = 2147483647,
|
double minValue = -2147483647, double maxValue = 2147483647,
|
||||||
int decimals = 1, bool *ok = Q_NULLPTR, Qt::WindowFlags flags = Qt::WindowFlags());
|
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)
|
#if QT_DEPRECATED_SINCE(5, 0)
|
||||||
QT_DEPRECATED static inline int getInteger(QWidget *parent, const QString &title, const QString &label, int value = 0,
|
QT_DEPRECATED static inline int getInteger(QWidget *parent, const QString &title, const QString &label, int value = 0,
|
||||||
@ -188,6 +193,9 @@ public:
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void setDoubleStep(double step);
|
||||||
|
double doubleStep() const;
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
// ### emit signals!
|
// ### emit signals!
|
||||||
void textValueChanged(const QString &text);
|
void textValueChanged(const QString &text);
|
||||||
|
@ -47,6 +47,7 @@ class tst_QInputDialog : public QObject
|
|||||||
static void testFuncGetDouble(QInputDialog *dialog);
|
static void testFuncGetDouble(QInputDialog *dialog);
|
||||||
static void testFuncGetText(QInputDialog *dialog);
|
static void testFuncGetText(QInputDialog *dialog);
|
||||||
static void testFuncGetItem(QInputDialog *dialog);
|
static void testFuncGetItem(QInputDialog *dialog);
|
||||||
|
static void testFuncSingleStepDouble(QInputDialog *dialog);
|
||||||
void timerEvent(QTimerEvent *event);
|
void timerEvent(QTimerEvent *event);
|
||||||
private slots:
|
private slots:
|
||||||
void getInt_data();
|
void getInt_data();
|
||||||
@ -61,6 +62,8 @@ private slots:
|
|||||||
void getItem();
|
void getItem();
|
||||||
void task256299_getTextReturnNullStringOnRejected();
|
void task256299_getTextReturnNullStringOnRejected();
|
||||||
void inputMethodHintsOfChildWidget();
|
void inputMethodHintsOfChildWidget();
|
||||||
|
void setDoubleStep_data();
|
||||||
|
void setDoubleStep();
|
||||||
};
|
};
|
||||||
|
|
||||||
QString stripFraction(const QString &s)
|
QString stripFraction(const QString &s)
|
||||||
@ -482,5 +485,45 @@ void tst_QInputDialog::inputMethodHintsOfChildWidget()
|
|||||||
QCOMPARE(editWidget->inputMethodHints(), Qt::ImhDigitsOnly);
|
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)
|
QTEST_MAIN(tst_QInputDialog)
|
||||||
#include "tst_qinputdialog.moc"
|
#include "tst_qinputdialog.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user