Qt 讀寫檔案,並顯示到tablewidget
阿新 • • 發佈:2019-01-02
//將表格資料寫入檔案 void DiagramTableItem::saveTable() { QString fileName = QFileDialog::getSaveFileName(0,tr("儲存檔案"), tr("/root/Projects/product/bin/config/未命名.xls"), tr("file(*.txt *.xls);;Allfile(*.*)")); if(!fileName.isEmpty()) { //將表格資料寫入檔案 if(QFileInfo(fileName).suffix().isEmpty()) { fileName.append(".xls"); } QFile file; file.setFileName(fileName); //開啟檔案 if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) { QMessageBox msg; msg.setText("開啟檔案失敗!"); msg.exec(); } else { qDebug("open file success:::"); QTextStream out(&file); int rowCount = m_tablewidget->rowCount(); int colCount = m_tablewidget->columnCount(); //將表頭寫入檔案 qDebug()<<"row count:::"<<rowCount<<"col count:::"<<colCount; for(int i = 0; i < colCount; i++) { QString rowHeaderString = m_tablewidget->horizontalHeaderItem(i)->text(); out << rowHeaderString << "\t"; } out << "\n"; for(int j = 0; j < rowCount; j++) { QString colHeaderString = m_tablewidget->verticalHeaderItem(j)->text(); out << colHeaderString << "\t"; } out << "\n"; qDebug("saveTable start:::"); //讀取單元格的資料並寫入檔案 qDebug()<<"row count:::"<<rowCount<<"col count:::"<<colCount; for(int row = 0; row < rowCount; row++) { for(int col = 0; col < colCount; col++) { QString text = m_tablewidget->item(row,col)->text(); qDebug()<<"text:::"<<text; if(text.isEmpty()) { out << "null" << "\t"; } else { out << text << "\t"; } } out << "\n"; //linux下換行符是'\n' } out.flush(); qDebug("saveTable end:::"); file.close(); //關閉檔案 QMessageBox::information(0,tr("提示"),tr("匯出成功!")); } } else { QMessageBox::warning(0,tr("警告"),tr("檔名未指定!"),QMessageBox::Ok); } } //將檔案資料匯入表格 void DiagramTableItem::importTable() { QString fileName = QFileDialog::getOpenFileName(0, tr("匯入檔案"), tr("/root/Projects/product/bin/config"), tr("file(*.txt *.xls);;Allfile(*.*)")); if(!fileName.isEmpty()) { QFile file; file.setFileName(fileName); //開啟檔案 if(!file.open(QIODevice::ReadOnly | QIODevice::Text)) { QMessageBox msg; msg.setText("開啟檔案失敗!"); msg.exec(); } else { if(!file.size()) { QMessageBox::warning(0,tr("警告"),tr("檔案大小為空!"),QMessageBox::Ok); } else { //將檔案資料匯入表格 int r_count = 0; //統計檔案的行數 QStringList textList; //記錄檔案中每一行的資料 QTextStream in(&file); while (!in.atEnd()) { QString line = in.readLine(); textList.append(line); //儲存檔案的資料 r_count++; //記錄檔案的行數 前兩行為表頭 } file.close(); //關閉檔案 if(!textList.isEmpty()) { QStringList listColHeader = textList.at(1).split("\t"); QStringList listRowHeader = textList.at(0).split("\t"); int c_count = listRowHeader.count(); m_tablewidget->clear(); m_tablewidget->setRowCount(r_count-2); //前兩行是行列表頭 m_tablewidget->setColumnCount(c_count-1); //最後一行是“\t" m_tablewidget->setHorizontalHeaderLabels(listRowHeader); m_tablewidget->setVerticalHeaderLabels(listColHeader); qDebug()<<"start importTable row count:::"<<r_count<<"col count:::"<<c_count; for(int row = 2; row < r_count; row++) { QStringList tmpList; tmpList = textList.at(row).split("\t"); for(int col = 0; col < c_count; col++) { QTableWidgetItem *item = new QTableWidgetItem(tmpList.at(col)); m_tablewidget->setItem(row-2, col, item); } } QMessageBox::information(0,tr("提示"),tr("匯入成功!")); } } } } else { QMessageBox::warning(0,tr("警告"),tr("檔名未指定!"),QMessageBox::Ok); } }