将qDateTimeEdit限制为15分钟

时间:2014-10-19 14:18:20

标签: c++ qt qt5

http://qt-project.org/doc/qt-5/qabstractspinbox.html#specialValueText-prop中有一个如何限制QSpinBox的示例。它说:

  zoomSpinBox->setSingleStep(10);

我的问题是我希望有一个QDateTimeEdit,用户只能按季度时间指定日期时间,即15分钟。

喜欢2014-12-12 12:30:00是有效且可能但是2014-12-12 12:10:00不是。

有没有简单的方法来实现这一点,因为我无法找到方法。

一个相当复杂的解决方案是验证用户的输入并将其四舍五入到下一个四分之一小时,但这是我想避免的,因为我发现它对于用户来说太过伪装/模糊。 (就像当他进入12:05然后更新到12:15,而他却没有看到它......)

2 个答案:

答案 0 :(得分:1)

一种方法是覆盖

 QDateTimeEdit::stepBy(int steps)

检查currentSection()返回的当前部分是否为分钟部分,并且以15分钟为单位进入/减少DateTime。当然,您仍然需要覆盖QDateTimeEdit::dateTimeFromText来修复键入的日期。

答案 1 :(得分:1)

setSingleStep(10);不提供验证,只是步骤,当用户键入其他数字时,spinbox会接受此数据。因此,您可以向用户显示他输入了错误的数据,并且您期望其他的数据。

例如:

void MainWindow::on_dateTimeEdit_dateTimeChanged(const QDateTime &dateTime)
{
    if(dateTime.time().minute() % 15 != 0)
    {
        ui->dateTimeEdit->setStyleSheet("background-color: red");
        QApplication::beep();//maybe
    }
    else
        ui->dateTimeEdit->setStyleSheet("");
}

错:

enter image description here

正确(0,15,30,45):

enter image description here