1. 概述
- QDateTimeEdit 是 Qt 提供的用于编辑日期和时间的控件,支持直接输入或通过弹出日历/时间选择器调整值。
- 继承自
QAbstractSpinBox
,是QDateEdit
和QTimeEdit
的父类,可同时处理日期和时间。 - 默认显示格式为系统本地化的日期时间格式,但支持自定义格式。
2. 核心特性
日期时间格式
-
使用
setDisplayFormat(const QString &format)
设置显示格式。cppdateTimeEdit->setDisplayFormat("yyyy-MM-dd HH:mm:ss");
- 常用格式符:
yyyy
:4 位年份MM
:2 位月份(01-12)dd
:2 位日期(01-31)HH
:24 小时制的小时(00-23)hh
:12 小时制的小时(01-12)mm
:分钟(00-59)ss
:秒(00-59)AP
或A
:AM/PM 标识(与hh
配合使用)
- 常用格式符:
日期时间范围限制
-
设置允许的最小和最大日期时间:
cppdateTimeEdit->setMinimumDateTime(QDateTime(QDate(2000, 1, 1), QTime(0, 0))); dateTimeEdit->setMaximumDateTime(QDateTime::currentDateTime());
弹出日历选择器
-
启用日历弹出窗口(默认禁用):
cppdateTimeEdit->setCalendarPopup(true);
键盘和鼠标交互
- 方向键或滚轮调整日期时间部分(如年、月、日)。
- 单击字段手动输入数值。
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. 示例代码
cpp
// 创建控件并初始化
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. 进阶用法
-
自定义弹出界面 :通过子类化并重写
event()
或使用QCalendarWidget
定制日历。 -
样式表(QSS) :修改外观:
cssQDateTimeEdit { background-color: #f0f0f0; border: 1px solid #888; padding: 2px; }