2014-10-19 76 views
2

http://qt-project.org/doc/qt-5/qabstractspinbox.html#specialValueText-prop中有一個如何限制QSpinBox的示例。它說:將qDateTimeEdit限制爲15分鐘

zoomSpinBox->setSingleStep(10); 

我的問題是,我想有一個QDateTimeEdit,用戶可以通過季度小時又名只有15分鐘指定日期倍。

贊2014-12-12 12:30:00是有效和可能的,但2014-12-12 12:10:00不是。

是否有任何簡單的方法來完成這一點,因爲我找不到方法。

一個相當複雜的解決方案是驗證用戶的輸入並將其舍入到下一個四分之一小時,但這是我想避免的,因爲我覺得它對於用戶來說太過掩飾/模糊。 (就像當他進入12:05,並更新到12:15沒有他真正看到它...)

回答

1

一種方法是覆蓋

QDateTimeEdit::stepBy(int steps) 

檢查,如果由currentSection()返回當前部分是分鐘部分,並以15分鐘爲單位遞減日期時間。當然,您仍然需要覆蓋QDateTimeEdit::dateTimeFromText來修復輸入日期。

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