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 ...
随机推荐
- [HAOI 2009]逆序对数列
Description 对于一个数列{ai},如果有i<j且ai>aj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的 数列,可以很容易求出有多少个逆序对数.那么逆 ...
- [HAOI2008]硬币购物
题目描述 硬币购物一共有4种硬币.面值分别为c1,c2,c3,c4.某人去商店买东西,去了tot次.每次带di枚ci硬币,买si的价值的东西.请问每次有多少种付款方法. 输入输出格式 输入格式: 第一 ...
- bzoj 5212: [Zjoi2018]历史
Description 九条可怜是一个热爱阅读的女孩子. 这段时间,她看了一本非常有趣的小说,这本小说的架空世界引起了她的兴趣. 这个世界有n个城市,这n个城市被恰好n?1条双向道路联通,即任意两个城 ...
- Codeforces 802L Send the Fool Further! (hard)
Description 题面 题目大意:求从根节点出发,每次随机走一个相邻的点,问走到任意一个叶子节点经过的路径长度的期望(走到就停止) Solution 树上高斯消元,复杂度是 \(O(n)\) 的 ...
- hdu 4283 区间dp
You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- bzoj 1835: [ZJOI2010]基站选址
Description 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci.如果在距离第i个村庄 ...
- mysql获取某个表的所有字段名
http://www.netingcn.com/mysql-column-name.html mysql安装成功后可以看到已经存在mysql.information_schema和test这个几个数据 ...
- vue 移动端公众号采坑经验
自己用vue做微信公众号项目有一段时间了,遇到各种奇葩的问题,下面细数那些坑: 第一坑:微信分享导致安卓手机无法调起相册和无法调起微信充值 解决方案: setTimeout(_ => { wx. ...
- Why Helm? - 每天5分钟玩转 Docker 容器技术(160)
本章我们将学习 Helm,Kubernetes 的包管理器. 每个成功的软件平台都有一个优秀的打包系统,比如 Debian.Ubuntu 的 apt,Redhat.Centos 的 yum.而 Hel ...
- Docker常见仓库Redis
Redis 基本信息 Redis 是开源的内存 Key-Value 数据库实现. 该仓库提供了 Redis 2.6 ~ 2.8.9 各个版本的镜像. 使用方法 默认会在 6379 端口启动数据库. $ ...