1. 概述
- QDateTimeEdit 是 Qt 提供的用于编辑日期和时间的控件,支持直接输入或通过弹出日历/时间选择器调整值。
- 继承自
QAbstractSpinBox
,是 QDateEdit
和 QTimeEdit
的父类,可同时处理日期和时间。 - 默认显示格式为系统本地化的日期时间格式,但支持自定义格式。
2. 核心特性
日期时间格式
日期时间范围限制
- 设置允许的最小和最大日期时间:
dateTimeEdit->setMinimumDateTime(QDateTime(QDate(2000, 1, 1), QTime(0, 0)));
dateTimeEdit->setMaximumDateTime(QDateTime::currentDateTime());
弹出日历选择器
键盘和鼠标交互
- 方向键或滚轮调整日期时间部分(如年、月、日)。
- 单击字段手动输入数值。
3. 常用方法
方法 | 说明 |
---|
setDateTime(const QDateTime &datetime) | 设置控件显示的日期时间 |
dateTime() const | 获取当前日期时间 |
setDate(const QDate &date) | 仅设置日期部分(时间保留原值) |
setTime(const QTime &time) | 仅设置时间部分(日期保留原值) |
setTimeSpec(Qt::TimeSpec spec) | 设置时区(如 Qt::LocalTime 或 Qt::UTC ) |
4. 信号
信号 | 说明 |
---|
dateTimeChanged(const QDateTime &datetime) | 日期或时间变化时触发 |
dateChanged(const QDate &date) | 日期变化时触发 |
timeChanged(const QTime &time) | 时间变化时触发 |
5. 示例代码
QDateTimeEdit *dateTimeEdit = new QDateTimeEdit(this);
dateTimeEdit->setDisplayFormat("yyyy-MM-dd HH:mm");
dateTimeEdit->setDateTime(QDateTime::currentDateTime());
dateTimeEdit->setCalendarPopup(true);
connect(dateTimeEdit, &QDateTimeEdit::dateTimeChanged, [](const QDateTime &dt) {
qDebug() << "New DateTime:" << dt.toString("yyyy-MM-dd HH:mm");
});
6. 注意事项
- 格式兼容性:确保格式字符串与系统本地化兼容,避免显示异常。
- 输入验证:若用户输入非法值,控件会自动调整为最近的有效值。
- 时区处理:默认使用本地时间,跨时区应用需显式设置
Qt::TimeSpec
。
7. 进阶用法