QDateTimeEdit - Hour/Minutes 部分在失去焦点时重置为空
QDateTimeEdit - Hour/Minutes sections resets to empty when focus is lost
我有一个 QDateTimeField
,掩码设置为 HH:mm
考虑用户删除(例如)小时部分的场景,如下所示:
如果用户清空小时部分并随后按回车键,小时部分将重置为 00(这是预期的行为,总是)。
如果用户清空小时部分并单击其他地方(当 QDateTimeField
失去焦点时),小时部分仍然是空的,这是我的问题。
任何人都可以提示我解决这个问题的方法吗?
我的建议是创建一个连接到信号 timeChanged 的动作,并手动将时间设置为正确的格式。
interpretText()
函数可以解决问题。在访问其文本之前,您必须在 setModelData
函数(在您的委托 class 中)中调用 QDateTimeEditor
的 interpretText()
。
根据 Qt documentation
This function interprets the text of the spin box. If the value has
changed since last interpretation it will emit signals.
示例:
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);
}
我有一个 QDateTimeField
,掩码设置为 HH:mm
考虑用户删除(例如)小时部分的场景,如下所示:
如果用户清空小时部分并随后按回车键,小时部分将重置为 00(这是预期的行为,总是)。
如果用户清空小时部分并单击其他地方(当 QDateTimeField
失去焦点时),小时部分仍然是空的,这是我的问题。
任何人都可以提示我解决这个问题的方法吗?
我的建议是创建一个连接到信号 timeChanged 的动作,并手动将时间设置为正确的格式。
interpretText()
函数可以解决问题。在访问其文本之前,您必须在 setModelData
函数(在您的委托 class 中)中调用 QDateTimeEditor
的 interpretText()
。
根据 Qt documentation
This function interprets the text of the spin box. If the value has changed since last interpretation it will emit signals.
示例:
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);
}