ユーザーが次のような時間セクションを削除するシナリオQDateTimeField
を考えてみましょう:HH:mm
ユーザーが時間セクションを空にしてから Enter キーを押すと、時間セクションは 00 にリセットされます (これは常に予期される動作です)。
ユーザーが時間セクションを空にして別の場所をクリックした場合 (QDateTimeField
フォーカスを失った場合)、時間セクションは空のままです。これが私の問題です。
この問題に取り組む方法を教えてくれる人はいますか?
interpretText()
関数がそのトリックを行います。そのテキストにアクセスする前に、関数内 (デリゲート クラス内) でを呼び出す必要interpretText()
があります。QDateTimeEditor
setModelData
Qtのドキュメントによると
この関数は、スピン ボックスのテキストを解釈します。最後の解釈以降に値が変更された場合、シグナルが送信されます。
例:
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
const QModelIndex &index) const
{
QDateTimeEdit *dateTime = static_cast<QDateTimeEdit*>(editor);
dateTime->interpretText();
model->setData(index, dateTime->text(), Qt::EditRole);
}
私の提案は、信号 timeChanged に接続し、手動で時刻を正しい形式に設定するアクションを作成することです。