整個實驗內容:
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));
}
}
}
}
完整代碼不好貼,因爲要麼說的太複雜,要麼就沒頭沒腦