234_QT_接233,打开txt文件,显示在做好二维布局的table view上和editText上【注意对txt文件数据的切割,以及显示到每一个item上的方式,双层for循环】

65 篇文章 6 订阅

void MainWindow::on_actOpen_triggered()
{
    QString currentFilePath = QCoreApplication::applicationDirPath();
    QString filename = QFileDialog::getOpenFileName(this, QString::fromLocal8Bit("打开一个文件"),
                                                    currentFilePath, QString::fromLocal8Bit("井数据文件(.txt);;所以文件(*.*)"));

    if(filename.isEmpty()){
        return;
    }

    QStringList fileContent;
    QFile file(filename);
    if(file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        QTextStream stream(&file);
        ui->plainTextEdit->clear();
        while (!stream.atEnd())
        {
            QString str = stream.readLine();
             ui->plainTextEdit->appendPlainText(str);
             fileContent.append(str);
        }

        file.close();
        this->LabCurFile->setText(QString::fromLocal8Bit("当前文件") + filename);

        initModelFromStringList(fileContent);
    }

}

void MainWindow::initModelFromStringList(QStringList &fileContent)
{

    int rowCnt=fileContent.count(); //文本行数,第1行是标题
    theModel->setRowCount(rowCnt-1); //实际数据行数

    //设置表头
    QString header=fileContent.at(0);//第1行是表头
    //一个或多个空格、TAB等分隔符隔开的字符串, 分解为一个StringList
    QStringList headerList=header.split(QRegExp("\\s+"),QString::SkipEmptyParts);
    theModel->setHorizontalHeaderLabels(headerList); //设置表头文字到table view上

    //开始设置表格数据
    int j;
    QStandardItem   *aItem;
    for (int i=1;i<rowCnt;i++)
    {
        QString aLineText=fileContent.at(i); //获取 数据区 的一行
        //一个或多个空格、TAB等分隔符隔开的字符串, 分解为一个StringList
        QStringList tmpList=aLineText.split(QRegExp("\\s+"),QString::SkipEmptyParts);
        for (j=0;j<FixedColoumCount-1;j++) //tmpList的行数等于FixedColumnCount, 固定的
        { //不包含最后一列
            aItem=new QStandardItem(tmpList.at(j));//创建item,相当于给与每一个item数据
            theModel->setItem(i-1,j,aItem); //为模型的某个行列位置设置Item,i-1:item的实际数据从0,0位置开始,最外层之所以从i==1开始,是要跳过标头数据而已
        }

        aItem=new QStandardItem(headerList.at(j));//最后一列是Checkable,需要设置
        aItem->setCheckable(true); //设置为Checkable
        if (tmpList.at(j)=="0")
            aItem->setCheckState(Qt::Unchecked); //根据数据设置check状态
        else
            aItem->setCheckState(Qt::Checked);
        theModel->setItem(i-1,j,aItem); //为模型的某个行列位置设置Item
    }

}


图示:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扳手的海角

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值