Qt的模糊搜索從數據庫中搜索

整個實驗內容:

1、從excel獲取以後需要填寫的信息,將獲取到的信息寫入數據庫,初始化模糊搜索條件內容

2、輸入完成的內容從數據庫檢索

第一步:


void MainWindow::on_createTable_clicked()
{
    QFile file("C:/Users/45906/Desktop/a.csv"); /* 方便測試,寫死了 */
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        qDebug() << "Cannot open file for reading: " << qPrintable(file.errorString());
        return;
    }
    qDebug() << "start time = " << QTime::currentTime();
    QSqlQuery query;
    QStringList list;
    QTextStream in(&file);
    int first = 0;
    while(!in.atEnd())
    {
       QString fileLine = in.readLine();  //從第一行讀取至下一行
       if(first == 0){
           first = 1;
       }else{
           list = fileLine.split(",", QString::SkipEmptyParts);
           query.prepare("INSERT INTO materialCode (id, name,sex,class,score,phone) VALUES (:idVal,:name,:sex,:class,:score,:phone)"); //準備執行SQL查詢
           query.bindValue(":idVal", list.at(0));
           query.bindValue(":name", list.at(1));
           query.bindValue(":sex", list.at(2));
           query.bindValue(":class", list.at(3));
           query.bindValue(":score", list.at(4));
           query.bindValue(":phone", list.at(5));
           completer_list << list.at(0); /* 模糊搜索條件 */
       }
    }
/* 作用是動態添加 */
    completer->setModel(new QStringListModel(completer_list, this));
    query.clear();

    qDebug() << "end time = " << QTime::currentTime();
    file.close();
}

第二步:

void MainWindow::on_tableWidget_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
{
    int row = 0,column = 0;
    QString text;
    QWidget *pWidget;
    if(current != nullptr){
        row = current->row();
        column = current->column();
        if(column != 0) /* 方便測試 */
            return;
        /* 獲取需要編輯的item的當前文本 */
        text = ui->tableWidget->item(row,column)->text();
        QLineEdit *myLineEdit=new QLineEdit;
        myLineEdit->setCompleter(completer);
        myLineEdit->setText(text);
        /* 將編輯框設置爲單元格的顯示小部件,編輯框不需要delete,小部件被remove時會自動回收 */
        ui->tableWidget->setCellWidget(row,column,myLineEdit);
    }
    if(previous != nullptr){
        row = previous->row();
        column = previous->column();
        if(column != 0) /* 方便測試 */
            return;
        /* 獲取當前文本內容 */
        pWidget = ui->tableWidget->cellWidget(row,column);
        text = static_cast<QLineEdit*>(pWidget)->text();
        /* 移除小部件 */
        ui->tableWidget->removeCellWidget(row,column);
        /* 將輸入內容設置到item中 */
        QString str = QString("select *from materialCode where id = '%1'").arg(text);
        QSqlQuery query;
        if(!query.exec(str)){
            qDebug()<<query.lastError();
        }else {
            while (query.next())
            {
                int id = query.value(0).toInt();
                QString name = query.value(1).toString();
                QString sex = query.value(2).toString();
                QString myclass = query.value(3).toString();
                QString score = query.value(4).toString();
                QString phone = query.value(5).toString();
                qDebug() << QString("%1,%2,%3,%4,%5,%6").arg(id).arg(name).arg(sex)\
                        .arg(myclass).arg(score).arg(phone);

                ui->tableWidget->setItem(row,column,new QTableWidgetItem(query.value(0).toString()));
                ui->tableWidget->setItem(row,column+1,new QTableWidgetItem(name));
                ui->tableWidget->setItem(row,column+2,new QTableWidgetItem(sex));
                ui->tableWidget->setItem(row,column+3,new QTableWidgetItem(myclass));
                ui->tableWidget->setItem(row,column+4,new QTableWidgetItem(score));
                ui->tableWidget->setItem(row,column+5,new QTableWidgetItem(phone));
            }
        }
    }
}

完整代碼不好貼,因爲要麼說的太複雜,要麼就沒頭沒腦 

下載:https://download.csdn.net/download/qq_41399894/12260458

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章