这里我使用了一个lineEdit从用户那里获取输入逗号分隔值。单击PushButton会将其写入文件( data.txt )。当我们点击ReadTable pushButton时,它应填写文件的第二列表格。我正在尝试读取以逗号分隔并尝试填充第二列的文本文件,但当前无法执行。第一列是固定列,不能从文件填充。 这是我迄今为止尝试过的代码。
void MainWindow::writefile()
{
QString str = ui->lineEdit->text();
QString filename = "data.txt";
QFile file(filename);
file.open(QIODevice::WriteOnly|QIODevice::Text);
QTextStream out(&file);
out<<str<<endl;
file.close();
}
void MainWindow::on_pushButton_3_clicked()
{
readfilefortable();
}
void MainWindow::readfilefortable()
{
QFile file("data.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
while (!file.atEnd())
{
QString line = file.readLine();
parseline(line);
}
}
void MainWindow::parseline(QString line)
{
QList< QStringList > list;
list << line.split(",");
ui->tableWidget->setRowCount(list.size());
ui->tableWidget->setColumnCount(2);
ui->tableWidget->setHorizontalHeaderLabels(QString("Field;Value").split(";"));
ui->tableWidget->setSortingEnabled( false );
QString string[5] = { "Sequence" , "Seconds" , "Cost" , "Offer" , "Promotion" };
for( int i = 4 ; i >= 0 ; --i )
{
ui->tableWidget->insertRow( 0 );
ui->tableWidget->setItem( 0 , 0 , new QTableWidgetItem( string[i] ) );
}
ui->tableWidget->setSortingEnabled( true );
}
答案 0 :(得分:1)
有些事情需要考虑。即使您编写文件,也应检查file.open():
QFile file( filename );
if ( file.open( QIODevice::WriteOnly | QIODevice::Text ) )
{
QTextStream out( &file );
out << str << endl;
file.close();
}
我认为使用QFile类的write(...)函数也会更容易。但这不是问题的一部分。
我认为您的代码存在两个主要问题。你写了这个:
QList< QStringList > list;
list << line.split( "," );
但你只需要这个:
QStringList list = line.split( "," );
您只需要一个字符串列表,而不是字符串列表的列表。
第二个问题是您从未尝试用任何数据填充第二列。你刚刚填写了第一列。使用此代码填充第一列也会更容易:
QStringList firstColumn = QStringList() << "Sequence" << "Seconds" << "Cost" << "Offer" << "Promotion";
for ( int i = 0; i < firstColumn.size(); ++i )
{
ui->tableWidget->setItem( i, 0, new QTableWidgetItem( firstColumn[ i ] ) );
}
以同样的方式填写第二列。
您也可以像这样填写水平标题。您不需要创建字符串并将其拆分。
ui->tableWidget->setHorizontalHeaderLabels( QStringList() << "Field" << "Value" );
更新: 您可以使用此文件更新第二列中的数据。
for ( int i = 0; i < listFromFile.size(); ++i )
{
ui->tableWidget->setItem( i, 1, new QTableWidgetItem( listFromFile[ i ] ) );
}
1用于表格小部件中的第二列。 listFromFile是代码中的变量列表。