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

效果:

在这里插入图片描述

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GreenHandBruce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值