c++ qt qlistwidget清空_【教程】QT中如何使用数据库保存系统信息

前言

相信大家肯定见过系统里面的系统日志,每一次的开机时间,每一次数据的传输,都记录在操作日志里。但是,系统是如何存储这些数据不丢失的呢?答案就是—-数据库。它就像单片机的flash一样,如果不删除,信息就会一直保存。每次开机我们将数据选择性的读取出来进行显示。

数据库

数据库几乎是每个较大的软件所必须应用的,在QT中也使用QtSql模块对数据库的完美支持,使用这个模块,我们需要加入头文件:#include,而在工程文件中需要加入:QT += sql。
其中,qt支持以下几种数据库,其中mysql和sqlite应用的比较广,我们今天的测试例程应用的是sqlite。

423385db67adf6ef4c4cb14e6cf7c130.png

比较mysql和sqlite,简单来说,sqlite功能简约,小型化,追求最大磁盘效率。而mysql功能全面,综合化,追求最大并发效率。如果只是单机上来用的话,数据量不是很大,需要方便移植或者需要频繁读写文件的话,用sqlite比较合适。而且qt自带sqlite数据库。不需要再安装。

数据库操作

嘻嘻,运行数据库首先肯定得先创建一个数据库了,我感觉sqlite的操作还是很简单的。基本上创建、打开、插入、删除、查询的代码都是一样的,可以封装成一个类,哪里需要那里引用。

- 据库创建

头文件中先QSqlDatabase m_db,建立一个QSqlDatabase对象

    bool Sqllite::createDB()    {        if (QSqlDatabase::contains("qt_sql_default_connection"))        {            m_db = QSqlDatabase::database("qt_sql_default_connection");        }        else        {            m_db = QSqlDatabase::addDatabase("QSQLITE");            m_db->setDatabaseName("MyDataBase.db");        }         bool openRet = m_db.open();         return openRet;    }

检查指定的连接是否存在,默认的名称是qt_sql_default_connection,如果存在,则返回true,如果不存在,就需要我们创建连接,添加数据库。注意,addDatabase的参数QSQLITE是sqlite对应的驱动,不能修改。还有第二个参数,就是qt的连接名称,如果只是处理单个数据库文件的话第二个参数就可以省略。

- 数据库打开和关闭

打开数据库的话就是调用open函数。
关闭数据库的话就是调用close函数。

- 数据库的表格操作

对于表格的操作需要智行sql语句。如果大家不懂sql语句的话可以简单搜索一下,还是比较通俗易懂的。稍微看看就能了解这些语句代表啥意思。1. 创建表格
定义一个执行SQL语句的函数,后面我们的查询、插入、删除等操作都会调用这个函数。

    bool QtSqlLiteTest::sqlQuery(const QString sql)    {        QSqlQuery query;        bool queryRet = query.exec(sql);        if(!queryRet)        {            qDebug() << (sql + " query fail");        }        return queryRet;    }

把需要执行的sql语句以QString的形式写到exec()函数的参数中。然后。看你啥需要了。不过这些插入、删除这些操作都是基于你有个表格。哈哈 ,先创建一个名为test表格。表格包括三列(a、b、c),b的类型是字符型。

    QString createTablaSql = "create table test (a int primary key, b varchar(30), c int)";    sqlQuery(createTablaSql);

2. 插入数据

    QString createTablaSql = "insert into test values('1','a','1')";    sqlQuery(createTablaSql);

3. 查询数据

    QString createTablaSql = "select a,b,c from test";    sqlQuery(createTablaSql);

4. 删除数据

    QString createTablaSql = "delect from test where a = ?";    sqlQuery(createTablaSql);

5. 清空表格

    QString createTablaSql = "delect from test ";    sqlQuery(createTablaSql);

软件设计

  • 软件:qtcreate

  • 平台:虚拟机或者ARM平台

我们先来看一下运行的效果:

54849655f0b08a4a58600715b47f3cd7.png

在两个编辑框中输入我们想要插入的数据,点击插入,数据就被存到了当前的tableview中,使用MVC模式,插入数据会自动更新列表,同时存入数据库中。看一下updata函数。

    bool QtSqlLiteTest::updateData()    {        bool commitState = false;        m_model->database().transaction();  //开始事务操作        if (m_model->submitAll())           // 提交所有被修改的数据到数据库中        {            commitState = m_model->database().commit();   //提交成功,事务将真正修改数据库数据        }        else        {            m_model->database().rollback(); //提交失败,事务回滚        }        if(!commitState) {qDebug() << m_model->lastError().text();};        return commitState;    }

修改数据和删除数据时可以调用此函数。比如我们右键点击出去删除按键,点击删除,数据库和列表中的数据就删除了。这个就是上节说到的信息和槽,嘿嘿!只是这个槽函数里面又调用了槽函数delData。

    void QtSqlLiteTest::showContextmenu(const QPoint& point)    {        QMenu *menu = new QMenu(m_tableView);        menu->addAction(("删除"), this, SLOT(delData()));        menu->exec(QCursor::pos());    }    void QtSqlLiteTest::delData()    {        int row = m_tableView->currentIndex().row();        m_model->removeRow(row);        updateData();    }

OK,我们和之前一样建立一个工程,然后建立一个类, 把创建、删除、插入等这些哈数都放到里面

298d0dabdfd6aa2564bf84aae68d49e5.png

插入的表格名称,包含的表头都需要在头文件中进行申明,否则调用的时候就会出错。执行SQL语句。initWidget就是生成的界面。initModel是生成模板,设置表格的名字等参数,同时将显示数据的tableview和建立的模板联系起来。用到了setModel函数,设置tableview的参数。

最后,我们的代码就放到工程链接里面吧,都加了注释,很容易看懂,就是里面的界面不是设计模式生成的,大家也可以参考下面的界面进行设计。

注:“->”符号在此网站的代码编辑显示中会变成下面这个:
->

53e8bb408be2810255bdc4aa88b871e5.png

总结

木得总结,哈哈,都很简单的小例程,适合稍微有点基础的初学者。工程链接:阅读全文获取

树莓派8G版 现货

 原价648元,活动价:589元 

超心动,立即购买

0d662a5e6b5069a4793b2123f1d7ffed.png

ea561e82a8549d05aa1f277edb307869.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值