QT日期时间

chrono?

DateTime

无论是数据类还是editor类,都要选择对应的类来使用,时间就用time,日期就用date!
QDateTime
用法参考下面俩
QDate

若无具体对象,可以通过静态函数调用来获取日期时间
QDate date=new QDate();//创建
date=QDate::currentDate();//当前日期

date=date.addDays(30);//返回加上n天后的date对象
date=date.addMonths(3);//返回加上n月后的date对象
date=date.addYears(10);//返回加上n年后的date对象
date.setDate(y,m,d);//设置date

date.day();//返回当前date的天数
date.month();//月
date.year();//年
date.dayOfWeek/Year();//返回当前日期是一周/一年中的第几天(不需要月因为日期本身就是月中的第n天)

date.daysTo(date2)//返回距离date2还有多少天

QTime

用于表示一个静态的时间(时分秒),注意区分时间量和时间点/时刻,因为time两者都可以表示
//尚还存在疑问,因为大于24小时的QTime被视为invalid(或许只是对于表示时刻来说,量可以无视是否valid)
QTime time=new QTime();//创建
time=QTime::currentTime();//获取当前时间(返回QTime)

time=time.addMSecs(1000);//返回time对象加上一个值后的新time对象
time.msec()://转换当前时间为ms并返回
time.secTo(time2);//返回当前time距离time2有多少s
time.setHMS(h,m,s);//一次性设置time的时分秒

//Time还可以分为时分秒
time.hour();
time.minute();
time.second();
    
//QTime也可以通过start方法来作为定时器
//但是是通过将当前QTime对象设为当前时间,elapse的时候再用未来的时间减去当前时间得到的
QTime fTimer;
fTimer.start();//启动计时
...
fTimer.stop();//停止计时
int elap=fTimer.elapsed();//获取自start以来过去的事件
int sec=elap/1000;
int msec=elap%1000;//因为是以ms为单位,所以要小小的转化一下
QString str=QString::asprintf("Time Elapsed:%ds%dms",sec,msec);

时间Editor

UI Designer中提供了相应的编辑日期时间的组件(类似spinBox)

一般就是set和get相应的editor值来使用
ui->tedit_Time->setTime(dt.time());//设置Edit的值(用QTime类型)
ui->tedit_Date->setDate(dt.date());//相应地使用QDate类型
ui->tedit_Datime->setDateTime(dt);//使用QDateTime类型
ui->tedit_Time->setDisplayFormat("hh:mm:ss");//设置timeEdit显示格式,三个editor都能设置
ui->edit->setMax/Minimum/Range();//设置editor所能到达的最大/小时间范围
ui->edit->setCalendarPopup(true);//弹出一个在editor日期范围内的日历,并可以返回选中的日期

time和string的转换

//要注意的是时间editor使用的确实是日期时间类,但若要传递给其他组件使用,一般都要转换为string或int类型
//将时间类型转为String,可以指定格式
QString tstr=dt.time().toString("hh:mm:ss");
QString dstr=dt.date().toString("yyyy-MM-dd");
QString dtstr=dt.toString("hh:mm,ddd.MMM.dd");

//从string转换到时间,需要指出string原来的时间格式(非转换后的格式)
//如下面要将string转换为QTime,通过分割字符串,并将分割后的转换为int作为一个QTime对象的构造函数参数
ui->tedit_Time->setTime
(QTime(str.section(':',0,0).toInt(),str.section(':',1,1).toInt(),str.section(':',2,2).toInt()));
//或者更简单的是使用内置函数,只需提供要转换的string和其时间格式即可
QDate d=QDate::fromString(str,"yyyy-MM-dd");
QDateTime dt=QDateTime::fromString(str,"hh:mm,ddd.MMM.dd");
QTime t=QTime::fromString(str,"hh:mm:ss");

Editor的信号槽

// 日期发生改变时执行
void onDateChanged(const QDate &date)
// 无论日期还是时间发生改变,都会执行
void onDateTimeChanged(const QDateTime &dateTime)
// 时间发生改变时执行
void onTimeChanged(const QTime &time)

Calender

函数

QDate d=calen->selectedDate();//获取所选中日期,返回QDate类型
calen->setSelectedDate(date);//编程方式设置所选日期
calen->monthShown/yearShown();//当前所显示的年/月

calen->setmaximumDate();//设置控件所能选择的最大/最小日期范围
calen->setDateRange();//同上,一举两得

calen->setSelectionMode(QCalendarWidget::NoSelection/SingleSelection);//设置选择mode(不可/单选)

calen->setFirstDayOfWeek(Fri);//设置控件第一列显示的是星期几

calen->dateTextFormat(date);//返回某一date所使用的QDateTextFormat(自定义格式)
calen->setDateTextFormat(date,format);//设置某一个date的格式

信号槽

//每当用户按下Return或Enter键,或双击日历中的某个日期时,都会发出此信号。
 void activated(QDate date)
 //单击某日期时触发。  该信号仅在单击有效日期时发出
 //例如,日期不在 minimumDate()和 maximumDate()之外。如果选择模式为 NoSelection,则不会发出此号。
 void clicked(QDate date)
 //年份月份变化
 void currentPageChanged(int year, int month)
 //当前选择的日期改变时发出这个信号。
 void selectionChanged()

你可能感兴趣的:(QT,qt)