效果:
原理:
1.在保存数据的时候就需要记录当前数据条目的时戳,我是按照1970-01-01 08:00:00为起始时间点,计算当前时间离这个起始时间一共是多少毫秒,如下:
QDateTime origin_time = QDateTime::fromString("1970-01-01 08:00:00","yyyy-MM-dd hh:mm:ss");
QDateTime current_time = QDateTime::currentDateTime();//显示时间,格式为:年-月-日 时:分:秒 周几
qint64 m_nTimeStep = origin_time.msecsTo(current_time);
然后把这个m_nTimeStep 作为数据表的一列存放进取,创建数据库的时候需要创建时戳这一栏(下面代码中的Timestamp就是时戳 ):
//创建表格
QSqlQuery sql_query;
QString strSql = "create table "+m_DBTableName+"(id INTEGER PRIMARY KEY autoincrement,Timestamp BIGINT,Date text,Time text,Level text,LogInfo text)";
if(!sql_query.exec(strSql))//执行创建数据库语句
{
qDebug()<<"Error:Failed to create table"<<sql_query.lastError();
}
else{
qDebug()<<"Table created!";
}
2.在查询的时候,界面上放两个QDateTimeEdit,作为查询的开始时间和结束时间,点击查询按钮的时候需要获取这两个控件的时间点,如下:
void DataBaseDlg::onDateButtonClicked()//查询按钮
{
qDebug()<<"onDateButtonClicked";
QDateTime origin_time = QDateTime::fromString("1970-01-01 08:00:00","yyyy-MM-dd hh:mm:ss");
QDateTime startDatetime = m_dateTimeEditStart->dateTime();
QDateTime endDatetime = m_dateTimeEditEnd->dateTime();
qint64 nStartSteps = origin_time.msecsTo(startDatetime);
qint64 nEndSteps = origin_time.msecsTo(endDatetime);
if(nStartSteps>nEndSteps)
{
QMessageBox mesg;
mesg.warning(this,"警告","查询开始时间晚于结束时间!");
return;
}
QString sStartSteps = QString("%1").arg(nStartSteps);
QString sEndSteps = QString("%1").arg(nEndSteps);
QString sFilter = "";//数据库查询语句
sFilter += "Timestamp > "+sStartSteps +" AND Timestamp < "+sEndSteps;
if(m_combobox->currentText() != "all")
{
sFilter +=" AND Level=\'" + m_combobox->currentText() + "\'";
}
m_model->setFilter(sFilter);//查询数据库
m_model->select();//选中数据库中所有条目
}
源码下载:https://download.csdn.net/download/weixin_43935474/11527596