日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

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

發布時間:2024/9/27 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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(); }

運行結果:

?

總結

以上是生活随笔為你收集整理的3.QT数据库综合案例,模糊查询等操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。