Qt实现按照时间查询数据库中的数据

效果:

Qt实现按照时间查询数据库中的数据_第1张图片

原理:
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"<

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

你可能感兴趣的:(QT)