3.QT数据库综合案例,模糊查询等操作
2014-12-16 20:41
417 查看
1
新建一个项目:
Database01.pro
SOURCES
+=
\
main.cpp
\
Contact.cpp
QT
+=
gui widgets
sql
CONFIG
+=
C++11
HEADERS
+=
\
Contact.h
Contact.h
Contact.cpp
main.cpp
运行结果:
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();
}
运行结果:
相关文章推荐
- 3.QT数据库综合案例,模糊查询等操作
- 数据库编程3 Oracle 子查询 insert update delete 事务 回收站 字段操作 企业级项目案例
- 终极解决sqlserver、MySQL、Oracle三种数据库模糊查询语句,ssm框架mybatis操作数据库
- thinkphp怎么like模糊查询数据库的信息curd操作
- JavaWeb-案例分析-查询、模糊查询、删除操作(3)
- 什么是数据库?数据库的作用想学数据库必看 (3)数据库操作 排序, 聚合函数 ,分组查询,分页查询,模糊查询,数据完整性
- Android将sqlite数据库保存到SD卡以及数据库增删改查操作,模糊查询like or
- 终极解决sqlserver、MySQL、Oracle三种数据库模糊查询语句,ssm框架mybatis操作数据库
- 综合运用javaBean、servlet对数据库的查询、插入等操作
- 第109讲: Spark Streaming电商广告点击综合案例动态黑名单基于数据库MySQL的真正操作代码实战
- (三)数据库故障处理的案例-数据库可以查询不能做更新操作
- ajax实现动态从数据库模糊查询显示到下拉框中(ajax方法返回Dataset的例子)
- Ajax实现在textbox中输入内容,动态从数据库中模糊查询显示到下拉框中
- ajax实现动态从数据库模糊查询显示到下拉框中,以供选择
- Sqlserver 在查询分析器里如何访问远程的的数据库,进行数据查询更新等操作。
- Ajax实现在textbox中输入内容,动态从数据库中模糊查询显示到下拉框中
- ajax实现动态从数据库模糊查询显示到下拉框中(ajax方法返回Dataset的例子)
- Ajax实现在textbox中输入内容,动态从数据库中模糊查询显示到下拉框中(ZT)
- [导入]Ajax实现在textbox中输入内容,动态从数据库中模糊查询显示到下拉框中
- 关于数据库中字段为日期的模糊查询问题