3.QT数据库综合案例,模糊查询等操作
生活随笔
收集整理的這篇文章主要介紹了
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数据库综合案例,模糊查询等操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 俄国十月革命发生的时间
- 下一篇: linux cmake编译源码,linu