3.QT数据库综合案例,模糊查询等操作
1
新建一个项目:
|
Database01.pro |
|
SOURCES main.cpp Contact.cpp QT CONFIG HEADERS Contact.h |
|
Contact.h |
#ifndef CONTACT_H #define CONTACT_H #include <QWidget> #include <QSqlTableModel> #include <QTableView> #include <QLineEdit> #include <QPushButton> class Contact : public QWidget {
Q_OBJECT public: explicit Contact(QWidget *parent); QSqlTableModel* _model; QTableView* _view; QLineEdit* _filter; QPushButton* _add; QPushButton* _del; QPushButton* _reset; QPushButton* _submit; signals: public slots: void slotModelDataChanged(QModelIndex,QModelIndex); void slotFilterChanged(QString filter); }; #endif // CONTACT_H |
|
Contact.cpp |
#include "Contact.h" #include <QVBoxLayout> #include <QHBoxLayout> #include <QSqlRecord> #include <QCompleter> #include <QDebug> Contact::Contact(QWidget *parent) : QWidget(parent) {
//创建一个QSqlTableModel _model = new QSqlTableModel; //创建QTable _view = new QTableView; //view里面设置model _view->setModel(_model); _model->setTable("tcontact");
//手动提交 _model->setEditStrategy(QSqlTableModel::OnManualSubmit); connect(_model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(slotModelDataChanged(QModelIndex,QModelIndex))); _model->select(); // set Layout QVBoxLayout* vBox = new QVBoxLayout(this); vBox->addWidget(_view); QHBoxLayout* hBox = new QHBoxLayout; vBox->addLayout(hBox); //添加add hBox->addWidget(_filter = new QLineEdit, 1); hBox->addWidget(_add=new QPushButton("Add"));
hBox->addWidget(_del=new QPushButton("Del"));
hBox->addWidget(_reset=new QPushButton("Reset"));
hBox->addWidget(_submit=new QPushButton("Submit"));
connect(_add, &QPushButton::clicked, [&](){
QSqlRecord record = _model->record(); _model->insertRecord(-1, record); }); connect(_del, &QPushButton::clicked, [&](){});
connect(_reset, &QPushButton::clicked, [&](){});
connect(_submit, &QPushButton::clicked, [&](){
_model->submitAll(); }); //模糊查询 connect(_filter, SIGNAL(textChanged(QString)), this, SLOT(slotFilterChanged(QString))); slotModelDataChanged(QModelIndex(), QModelIndex()); } void Contact::slotFilterChanged(QString filter) {
if(filter.isEmpty()) {
_model->setFilter("");
_model->select(); return; } // username like filter or password like filter ....... QSqlRecord record = _model->record(); QString modelFilter; for(int i=0; i<record.count(); ++i) {
if(i!=0) {
modelFilter += " or "; } QString field = record.fieldName(i); QString subFilter = QString().sprintf("%s like '%%%s%%'", field.toUtf8().data(), filter.toUtf8().data());
// qDebug() << subFilter; modelFilter += subFilter; } qDebug() << modelFilter; _model->setFilter(modelFilter); _model->select(); } void Contact::slotModelDataChanged(QModelIndex,QModelIndex) {
QStringList strList; for(int i=0; i<_model->rowCount(); ++i) {
QSqlRecord record = _model->record(i); for(int j=0; j<record.count(); ++j) {
QVariant var = record.value(j); if(var.isNull()) continue; strList << var.toString(); } } qDebug() << strList; QCompleter* completer=new QCompleter(strList); _filter->setCompleter(completer); } |
|
main.cpp |
#include <QApplication> #include "Widget05.h" #include <QSqlDatabase> #include <QSqlError> #include <QDebug> #include "Contact.h" int main(int argc,char* argv[]) {
QApplication app(argc,argv); /*QT可以操作 QSLITE QODBC,QPLSQL 这些数据库*/ //下面表示使用mysql数据库,因为这里的db没有用到db,所以可以把它放在main中 //本质:在QT里面打开一个数据库之后,就会保存一个数据库连接, //其它的位置就可以任意使用这个全局的变量了 QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1"); //设置数据库所在位置
db.setUserName("root"); //设置数据库的用户名
db.setPassword("123456"); //设置数据库的密码
db.setDatabaseName("d0718"); //设置数据库名称
bool bRet = db.open(); //打开数据库连接 if(bRet == false) {
//说明可以通过db.lastError()的方式得到错误信息 qDebug() << "error open database" << db.lastError().text(); exit(0); } qDebug() << "open database success"; //注意Widget02要写在上面代码的下面 Contact c; c.show(); return app.exec(); } |
|
运行结果: |
3.QT数据库综合案例,模糊查询等操作的更多相关文章
- IOS开发数据库篇—SQLite模糊查询
IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: // // YYPerson.h // 03- ...
- Java数据库学习之模糊查询(like )
Java数据库学习之模糊查询(like ): 第一种方式:直接在SQL语句中进行拼接,此时需要注意的是parm在SQL语句中需要用单引号拼接起来,注意前后单引号之间不能空格 String sql = ...
- C# 调用Access数据库关于like模糊查询的写法
在access查询视图中要使用"*"做模糊匹配,但是在程序中要用%来匹配.在access中:NEIBUBH like '*1234*'在程序中:NEIBUBH like '%123 ...
- 小记------mongodb数据库如何进行模糊查询
// 模糊匹配createTime 是以 2019-07-23 开头 db.getCollection('driver_online_record').find({"createTime ...
- 007.Oracle数据库 , 使用%进行模糊查询
/*Oracle数据库查询日期在两者之间*/ SELECT PKID, OCCUR_DATE, ATA FROM LM_FAULT WHERE ( ( OCCUR_DATE >= to_date ...
- Python使用sql语句对mysql数据库多条件模糊查询
1 def find_worldByName(c_name,continent): 2 print(c_name) 3 print(continent) 4 sql = " SELECT * ...
- Redis 模糊查询删除操作
创建一条测试 数据 查询 创建:set name xiaoming 查询: get name 1.模糊搜索查询 Redis 模糊搜索 keys * 2.删除指定key : # 删除所有以user开头的 ...
- Oracle 数据库基础:数据查询与操作
SELECT uname FROM TUser WHERE uname=‘admin’ SELECT 字段名列表 FROM 表名 WHERE 条件; 在Oracle数据库中,对象是属于模式的,每个账户 ...
- Access数据库的模糊查询到底是用*还是%
今天被用了一下Access数据库,结果被它的模糊查询给折腾了一上午,到底是用*还是%?特此记下来 事情是这样的,我用C#写了个小的窗体程序,访问Access数据库进行一个模糊查询,我先手工往Acces ...
随机推荐
- [JLOI 2011]飞行路线&[USACO 09FEB]Revamping Trails
Description Alice和Bob现在要乘飞机旅行,他们选择了一家相对便宜的航空公司.该航空公司一共在n个城市设有业务,设这些城市分别标记为0到n-1,一共有m种航线,每种航线连接两个城市,并 ...
- 【BZOJ1026】【SCOI2009】windy数
Description windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? In ...
- 【Toll!Revisited(uva 10537)】
题目来源:蓝皮书P331 ·这道题使得我们更加深刻的去理解Dijkstra! 在做惯了if(dis[u]+w<dis[v])的普通最短路后,这道选择路径方案不是简单的比大小的题横在了 ...
- [APIO2016]
2016的题貌似是韩国棒子出的,好丧啊.... 看了题解还想了好久...... ------------------------------------------------- A.Boat 有n个 ...
- Java Native方法
一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口.一个Native Method是这样一个java的方法:该方法的实现由非j ...
- DecimalFormat(用于格式化十进制数字)
1概念: DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字.该类设计有各种功能,使其能够分析和格式化任意语言环境中的数,包括对西方语言.阿拉伯语和印度语数 ...
- Java高新技术第一篇:类加载器详解
首先来了解一下字节码和class文件的区别: 我们知道,新建一个Java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java工程的 ...
- promise应用及原生实现promise模型
一.先看一个应用场景 发送一个请求获得用户id, 然后根据所获得的用户id去执行另外处理.当然这里我们完全可以使用回调,即在请求成功之后执行callback; 但是如果又添加需求呢?比如获得用户id之 ...
- js判断奇偶数实现隐藏显示功能 与css立体按钮
hello! 好久不见了 ,今天也没准备什么技术,知识想和大家就见个面,一个js判断奇数偶数来实现css样式 ,感觉最大的用途就是页面的导航.就这么一个小小的技术. 劳动快乐 当!当!当! ...
- FJUT寒假作业涨姿势题解
题意非常简单易懂,对于涨姿势0,数据非常小,比较容易想到的是直接循环暴力解题完成任务.把数据放入数组arr,循环i,j控制所有区间算和.结果记入vis. 到了涨姿势1,2,3,我们观察数据变化,发现数 ...