在Qt中从文本文件填充表格小部件

时间:2012-05-15 20:58:04

标签: qt file user-interface widget

我是Qt的新手,需要以下方面的帮助:

我想创建一个包含表格小部件的GUI,该表格小部件由来自制表符分隔文本文件的信息填充。在我的GUI中,用户首先浏览文本文件,然后它将在表格小部件中显示内容。我已经完成了浏览部分,但是如何将文本文件中的数据加载到表格小部件中?

2 个答案:

答案 0 :(得分:8)

这是两个步骤,解析文件,然后将其推入窗口小部件。

我从QFile documentation获取了这些行。

 QFile file("in.txt");
 if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
     return;

 while (!file.atEnd()) {
     QByteArray line = file.readLine();
     process_line(line);
 }

您的process_line函数应如下所示:

static int row = 0;
QStringList ss = line.split('\t');

if(ui->tableWidget->rowCount() < row + 1)
    ui->tableWidget->setRowCount(row + 1);
if(ui->tableWidget->columnCount() < ss.size())
    ui->tableWidget->setColumnCount( ss.size() );

for( int column = 0; column < ss.size(); column++)
{
    QTableWidgetItem *newItem = new QTableWidgetItem( ss.at(column) );
    ui->tableWidget->setItem(row, column, newItem);
}

row++;

有关操纵QTableWidgets的更多信息,请查看documentation。对于在Qt Creator中使用GUI构建器的新用户,一开始很难搞清楚它。

最终我建议按照他们在examples中的方式切换到构建GUI ...在代码中手动添加所有内容而不是拖放。

答案 1 :(得分:-2)

...对不起

void squidlogreader_::process_line(QString line)
{
    static int row = 0;
    QStringList ss = line.split('\t');

    if(ui->tableWidget->rowCount() < row + 1)
    ui->tableWidget->setRowCount(row + 1);
    if(ui->tableWidget->columnCount() < ss.size())
    ui->tableWidget->setColumnCount( ss.size() );

    for( int column = 0; column < ss.size(); column++)
    {
    QTableWidgetItem *newItem = new QTableWidgetItem( ss.at(column) );
    ui->tableWidget->setItem(row, column, newItem);
    }

    row++;

}
void squidlogreader_::on_pushButton_clicked()
{
    QFile file("in.txt");
    if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
        return;

    while (!file.atEnd()) {
        QString line = file.readLine();
        process_line(line);
    }
相关问题