1
新建一个项目:

Database01.pro

SOURCES
+=
\

main.cpp
\

Contact.cpp

QT
+=
gui widgets
sql

CONFIG
+=
C++11

HEADERS
+=
\

Contact.h

Contact.h

  1. #ifndef CONTACT_H
  1. #define CONTACT_H
  1.  
  1. #include <QWidget>
  1. #include <QSqlTableModel>
  1. #include <QTableView>
  1. #include <QLineEdit>
  1. #include <QPushButton>
  1. class Contact : public QWidget
  1. {
  1.     Q_OBJECT
  1. public:
  1.     explicit Contact(QWidget *parent);
  1.  
  1.     QSqlTableModel* _model;
  1.     QTableView* _view;
  1.  
  1.     QLineEdit* _filter;
  1.     QPushButton* _add;
  1.     QPushButton* _del;
  1.     QPushButton* _reset;
  1.     QPushButton* _submit;
  1. signals:
  1.  
  1. public slots:
  1.  
  1.     void slotModelDataChanged(QModelIndex,QModelIndex);
  1.     void slotFilterChanged(QString filter);
  1.  
  1. };
  1.  
  1. #endif // CONTACT_H

Contact.cpp

  1. #include "Contact.h"
  1. #include <QVBoxLayout>
  1. #include <QHBoxLayout>
  1. #include <QSqlRecord>
  1. #include <QCompleter>
  1. #include <QDebug>
  1. Contact::Contact(QWidget *parent) :
  1.     QWidget(parent)
  1. {
  1.     //创建一个QSqlTableModel
  1.     _model = new QSqlTableModel;
  1.     //创建QTable
  1.     _view = new QTableView;
  1.     //view里面设置model
  1.     _view->setModel(_model);
  1.  
  1.     _model->setTable("tcontact");
  1.     //手动提交
  1.     _model->setEditStrategy(QSqlTableModel::OnManualSubmit);
  1.  
  1.     connect(_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
  1.             this, SLOT(slotModelDataChanged(QModelIndex,QModelIndex)));
  1.  
  1.     _model->select();
  1.  
  1.     // set Layout
  1.     QVBoxLayout* vBox = new QVBoxLayout(this);
  1.     vBox->addWidget(_view);
  1.  
  1.     QHBoxLayout* hBox = new QHBoxLayout;
  1.     vBox->addLayout(hBox);
  1.  
  1.     //添加add
  1.     hBox->addWidget(_filter = new QLineEdit, 1);
  1.     hBox->addWidget(_add=new QPushButton("Add"));
  1.     hBox->addWidget(_del=new QPushButton("Del"));
  1.     hBox->addWidget(_reset=new QPushButton("Reset"));
  1.     hBox->addWidget(_submit=new QPushButton("Submit"));
  1.  
  1.     connect(_add, &QPushButton::clicked, [&](){
  1.         QSqlRecord record = _model->record();
  1.         _model->insertRecord(-1, record);
  1.     });
  1.     connect(_del, &QPushButton::clicked, [&](){});
  1.     connect(_reset, &QPushButton::clicked, [&](){});
  1.     connect(_submit, &QPushButton::clicked, [&](){
  1.         _model->submitAll();
  1.     });
  1.  
  1.     //模糊查询
  1.     connect(_filter, SIGNAL(textChanged(QString)),
  1.             this, SLOT(slotFilterChanged(QString)));
  1.  
  1.     slotModelDataChanged(QModelIndex(), QModelIndex());
  1. }
  1.  
  1. void Contact::slotFilterChanged(QString filter)
  1. {
  1.     if(filter.isEmpty())
  1.     {
  1.         _model->setFilter("");
  1.         _model->select();
  1.         return;
  1.     }
  1.     //  username like filter or password like  filter .......
  1.     QSqlRecord record = _model->record();
  1.     QString modelFilter;
  1.     for(int i=0; i<record.count(); ++i)
  1.     {
  1.         if(i!=0)
  1.         {
  1.             modelFilter += " or ";
  1.         }
  1.         QString field = record.fieldName(i);
  1.         QString subFilter = QString().sprintf("%s like '%%%s%%'", field.toUtf8().data(), filter.toUtf8().data());
  1.         //  qDebug() << subFilter;
  1.  
  1.         modelFilter += subFilter;
  1.  
  1.     }
  1.     qDebug() << modelFilter;
  1.     _model->setFilter(modelFilter);
  1.     _model->select();
  1. }
  1.  
  1. void Contact::slotModelDataChanged(QModelIndex,QModelIndex)
  1. {
  1.     QStringList strList;
  1.     for(int i=0; i<_model->rowCount(); ++i)
  1.     {
  1.         QSqlRecord record = _model->record(i);
  1.         for(int j=0; j<record.count(); ++j)
  1.         {
  1.             QVariant var = record.value(j);
  1.             if(var.isNull()) continue;
  1.             strList << var.toString();
  1.         }
  1.     }
  1.     qDebug() << strList;
  1.     QCompleter* completer=new QCompleter(strList);
  1.     _filter->setCompleter(completer);
  1. }

main.cpp

  1. #include <QApplication>
  1. #include "Widget05.h"
  1. #include <QSqlDatabase>
  1. #include <QSqlError>
  1. #include <QDebug>
  1. #include "Contact.h"
  1.  
  1. int main(int argc,char* argv[])
  1. {
  1.     QApplication app(argc,argv);
  1.  
  1.     /*QT可以操作 QSLITE QODBC,QPLSQL 这些数据库*/
  1.     //下面表示使用mysql数据库,因为这里的db没有用到db,所以可以把它放在main中
  1.     //本质:在QT里面打开一个数据库之后,就会保存一个数据库连接,
  1.     //其它的位置就可以任意使用这个全局的变量了
  1.     QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
  1.     db.setHostName("127.0.0.1");  //设置数据库所在位置
  1.     db.setUserName("root");       //设置数据库的用户名
  1.     db.setPassword("123456");     //设置数据库的密码
  1.     db.setDatabaseName("d0718");  //设置数据库名称
  1.     bool bRet = db.open();        //打开数据库连接
  1.  
  1.     if(bRet == false)
  1.     {
  1.         //说明可以通过db.lastError()的方式得到错误信息
  1.         qDebug() << "error open database" << db.lastError().text();
  1.         exit(0);
  1.     }
  1.     qDebug() << "open database success";
  1.  
  1.     //注意Widget02要写在上面代码的下面
  1.     Contact c;
  1.     c.show();
  1.     return app.exec();
  1. }

运行结果:

3.QT数据库综合案例,模糊查询等操作的更多相关文章

  1. IOS开发数据库篇—SQLite模糊查询

    IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: // // YYPerson.h // 03- ...

  2. Java数据库学习之模糊查询(like )

    Java数据库学习之模糊查询(like ): 第一种方式:直接在SQL语句中进行拼接,此时需要注意的是parm在SQL语句中需要用单引号拼接起来,注意前后单引号之间不能空格 String sql = ...

  3. C# 调用Access数据库关于like模糊查询的写法

    在access查询视图中要使用"*"做模糊匹配,但是在程序中要用%来匹配.在access中:NEIBUBH like '*1234*'在程序中:NEIBUBH like '%123 ...

  4. 小记------mongodb数据库如何进行模糊查询

    // 模糊匹配createTime   是以 2019-07-23 开头 db.getCollection('driver_online_record').find({"createTime ...

  5. 007.Oracle数据库 , 使用%进行模糊查询

    /*Oracle数据库查询日期在两者之间*/ SELECT PKID, OCCUR_DATE, ATA FROM LM_FAULT WHERE ( ( OCCUR_DATE >= to_date ...

  6. Python使用sql语句对mysql数据库多条件模糊查询

    1 def find_worldByName(c_name,continent): 2 print(c_name) 3 print(continent) 4 sql = " SELECT * ...

  7. Redis 模糊查询删除操作

    创建一条测试 数据 查询 创建:set name xiaoming 查询: get name 1.模糊搜索查询 Redis 模糊搜索 keys * 2.删除指定key : # 删除所有以user开头的 ...

  8. Oracle 数据库基础:数据查询与操作

    SELECT uname FROM TUser WHERE uname=‘admin’ SELECT 字段名列表 FROM 表名 WHERE 条件; 在Oracle数据库中,对象是属于模式的,每个账户 ...

  9. Access数据库的模糊查询到底是用*还是%

    今天被用了一下Access数据库,结果被它的模糊查询给折腾了一上午,到底是用*还是%?特此记下来 事情是这样的,我用C#写了个小的窗体程序,访问Access数据库进行一个模糊查询,我先手工往Acces ...

随机推荐

  1. 李耀于NOIP2010集训出的题 Dvalue

    此题模型比较明显,求无向图的一棵生成树,使得最大边减去最小边的值最小,这是最小生成树的一个变式 设计出此题的算法需要利用Kruskal贪心的性质,首先枚举一条最小边,接着求原图的一棵最小生成树,根据k ...

  2. UVALive - 3882:And Then There Was One

    约瑟夫环 f[i]表示有i个人先处理第k个人,最后被处理的人是谁 #include<cstdio> #include<cstdlib> #include<algorith ...

  3. ●BZOJ 2588 Spoj 10628. Count on a tree

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2588 题解: 主席树,在线,(求LCA)感觉主席树真的好厉害...在原树上建主席树.即对于原 ...

  4. [UOJ UR #4追击圣诞老人]

    来自FallDream的博客,未经允许,请勿转载, 谢谢. 传送门 考虑直接维护一个堆,然后往里面丢链,并且取出k个堆顶就行了. 然后就需要分类讨论啥的,给你的三个点变成两条链,每次取出一条链之后选择 ...

  5. bzoj 1974: [Sdoi2010]代码拍卖会

    Description 随着iPig在P++语言上的造诣日益提升,他形成了自己一套完整的代 码库.猪王国想参加POI的童鞋们都争先恐后问iPig索要代码库.iPi g不想把代码库给所有想要的小猪,只想 ...

  6. bzoj3156防御准备 斜率优化dp

    3156: 防御准备 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2279  Solved: 959[Submit][Status][Discuss ...

  7. django-rest-framework 注意事项

    注意事项: 在使用django rest framework时候由于网上资料太多,出现了 由一下两个函数导致的问题: from django.views.decorators.csrf import ...

  8. [Java] 设计模式:代码形状 - lambda表达式的一个应用

    [Java] 设计模式:代码形状 - lambda表达式的一个应用 Code Shape 模式 这里介绍一个模式:Code Shape.没听过,不要紧,我刚刚才起的名字. 作用 在应用程序的开发中,我 ...

  9. Linux sort -n 与 -g 排序对比

    公司业务需要,天天用awk统计数值然后排序,出问题了,如下: count.sh 是一个统计脚本,把awk输出的值按占比.条数.类型 在重新输出 awk -F\| '{print $16}' *MQTT ...

  10. 判断是否是IE9浏览器的最短语句 var ie=!-[1,]

    没错,上面这个语句就可以判断浏览器是不是IE9以下的.why?1.[1,]在现代浏览器(ie包括ie9及以上)会被转换成[1], 而ie9以下就会转换成[1,undefined].2.分别对[1],和 ...