背景:QT编程,dateTimeEdit是一个QCombobox下拉菜单控件,从中读取事件日期转换为char 类型,eventLogMessage.shartDateTime是char * 类型。
这是最原始的实现方法:
QDateTime dd = ui->dateTimeEdit->dateTime();
QString tt = dd.toString("yyyy-MM-dd hh:mm:ss");QByteArray aa =tt.toLatin1();
eventLogMessage.shartDateTime=aa.data();
第一种修改方法:做一个函数实现,函数输入参数为ui->dateTimeEdit->dateTime(),返回值为aa.data();
char *dvr_eventlog::dateTimeToChar(QDateTime dateTime)
{
char *re;
QString str=dateTime.toString("yyyy-MM-dd hh:mm:ss");
QByteArray ba=str.toLatin1();
re=ba.data();
return re;
}
主函数调用处:
eventLogMessage.shartDateTime=dateTimeToChar(ui->dateTimeEdit->dateTime());
结果是:printf打印验证结果是对的,但是后面这个时间数据用于SQLite数据检索读出的时候就有问题了。
第二种修改方法:做一个无返回值的函数,使用参数传出方式返回aa.data(); 值
void dvr_eventlog::dateTimeToChar(QDateTime dateTime,char *tmp)
{
QString str=dateTime.toString("yyyy-MM-dd hh:mm:ss");
QByteArray ba=str.toLatin1();
strcpy(tmp,ba.data());
}
主函数调用处:
char tmp[50];
dateTimeToChar(ui->dateTimeEdit->dateTime(),tmp);
eventLogMessage.shartDateTime=tmp;
结果是:printf打印的结果与前两种方式完全相同strlen长度也相同,但这样就可以检索出来(与之前相同的日期时间,格式也相同)
第三种修改方法:还是做一个无返回值得函数,使用两级指针返回字符串
void dvr_eventlog::dateTimeToChar(QDateTime dateTime,char **tmp)
{
QString str=dateTime.toString("yyyy-MM-dd hh:mm:ss");
QByteArray ba=str.toLatin1();
*tmp=ba.data();
}
主函数调用处:
char *tmp;
dateTimeToChar(ui->dateTimeEdit->dateTime(),&tmp);
eventLogMessage.shartDateTime=tmp;
疑问:这样做有问题吗?
最终结果:采用方式二