3.QT数据库综合案例,模糊查询等操作



1
新建一个项目:


Database01.pro


SOURCES
+=
\

main.cpp
\

Contact.cpp

QT
+=
gui widgets
sql

CONFIG
+=
C++11

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 = 0);
 
    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();
}

运行结果:

时间: 2024-10-29 19:12:39

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

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

IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: 1 // 2 // YYPerson.h 3 // 03-模糊查询 4 // 5 // Created by apple on 14-7-27. 6 // Copyright (c) 2014年 wendingding. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h

小记------mongodb数据库的一些模糊查询

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

postgresql数据库-number类型模糊查询

这两种方式都是可以的: select * from aaa a where  a.org_code ||'' like '86%';--推荐使用这种,简单,一看就是高手写出来的 select * from aaa  where  1=1 and cast(org_code as varchar(10)) like '%1%'; 原文地址:https://www.cnblogs.com/dongyaotou/p/12677071.html

数据库 sql xml类型 查询及操作

/* sql xml 入门:     --by jinjazz     --http://blog.csdn.net/jinjazz          1.xml:        能认识元素.属性和值          2.xpath:    寻址语言,类似windows目录的查找(没用过dir命令的话就去面壁)                                  语法格式,这些语法可以组合为条件:                 "."表示自己,"..&quo

iOS数据持久化—数据库SQLite模糊查询

IOS开发数据库篇—SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: // // YYPerson.h // 03-模糊查询 // // Created by apple on 14-7-27. // Copyright (c) 2014年 wendingding. All rights reserved. // #import <Foundation/Foundation.h> @interface YYPe

winform中ComboBox利用AutoComplete属性实现模糊查询(有缺陷)

上一篇文章是用ComboBox里面的原生事件实现模糊查询,操作比较灵活一些,但是收到评论说,利用AutoComplete属性就可以实现模糊查询,但是据本人所了解,AutoComplete虽然能够方便的实现模糊查询,但是有一定的缺陷,就是,模糊查询只能从左往右. 上一篇连接地址:http://www.cnblogs.com/xilipu31/p/3993049.html 下面是简单的实现方式: 前台:一个简单的form窗体+ComboBox控件 后台:申明List<string> listOni

使用Mysql数据库完成增删改查综合案例(JSP页面)

本案例页面如下: 这是index.jsp页面(包含模糊查询) <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import=" java.sql.* "%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01

数据库之模糊查询,视图,序列,索引

1. 模糊查询 关键字" like " %  代表任意个字符 _代表一个字符 select test1 from test where test1 like _b(%b%) //查询test表中test1列中 第二个字符是b的数据(中含有b数据) 2. 视图 好处: 1)限制对数据库的访问2)简化查询3)维护数据的独立性4)对相同的数据可以建立不同的视图5)可以删除视图而不影响数据 create [or replace] view v_test as (要建成视图的数据) //as后可

struts2和数据库模糊查询

模糊查询是很常用的现在我给大家讲一下,废话不多说请看下面例子: 如需源代码请到http://blog.csdn.net/u014626784中下载,更详细,如有不懂请留言 struts2和数据库模糊查询,布布扣,bubuko.com