//将表格数据写入文件
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);
}
}
Qt 读写文件,并显示到tablewidget
最新推荐文章于 2024-05-15 04:42:02 发布