私は Google と Stackoverflow を見回してきましたが、正しい日付 (YYYY-MM-DD など) を表すために 3 つのコンボボックスを自動入力する簡単な解決策があるかどうかはまだわかりません。QCalendarWidgetに関連していると思います。何か案は?
現在の時刻から X 年前の日付までスクロールできるようにしたいのですが、2011 年 2 月 29 日のような存在しない日付を含めることはできません。
今、私はあなたの考えを理解しています。
答えは簡単です。3 つのコンボ ボックスを作成します: 日 (1 - 31)、月 (1 - 12)、年 (つまり 1999 - 2012)。「OK」ボタンを作成します。超論理は必要ありません。
ボタンを押した後、ユーザーが指定した 3 つの数字で QDate オブジェクトを作成し、QDate::isValid() を呼び出して日付を検証します。そうでない場合は、警告プロンプトを作成し、ユーザーに入力内容を変更するように依頼します。
ユーザーが入力したデータを検証する最善の方法は、QDialog::done() メソッドをオーバーライドすることです。
void Dialog::done(int r)
{
if(r == QDialog::Accepted) {
QDate date;
//Create QDate from comboboxes' values
...
if(!date.isValid()) {
//Some warning to user.
return;
}
}
QDialog::done(r);
}
int X = 2;
QDate date = QDate::currentDate(), lastDate = date.addYears(-X);
for(; date > lastDate; date = date.addDays(-1))
ui->comboBox->addItem(date.toString("yyyy-MM-dd"));