20.QTableView操作及导出csv--Apple的学习笔记

一,前言

发现了身边的需求,我准备为此做个小工具。包括信息输出及绘制波形图。今天先解决表格信息显示。

二,需求

按钮触发添加QtableView一行信息,信息需要包括时间戳,可以导出excel。

三,遇到的问题

1. 时间戳获取方法?
答:如下即可。

    QString timestamp = QDateTime::currentDateTime().toString("hh:mm:ss.zzz");

2. QTableview如何设置自适应列宽
答:需要加入头文件QHeaderView后进行控制

    // 设置列宽
    tableview->setColumnWidth(0,80);
    tableview->setColumnWidth(1,40);
    tableview->setColumnWidth(2,50);
    //tableview->setColumnWidth(3,150);
    // 设置第3列为自适应列宽
    tableview->horizontalHeader()->setSectionResizeMode(3,QHeaderView::Stretch);

3. 如何获取信号的发送者对象
答:网上找到的方法,用起来不错。其实就是一个sender()函数。但是我最后没有使用此方法,仅做了实验。

    QPushButton *button =  qobject_cast(sender());
    ui->textLabel->setText(button->text());

4. 设置QTableView的高度?
答:不是设置某行的高度,而是总大小的高度。原来是用resize哈哈~
5. QTable如何设置右键功能?
答:需要修改菜单策略。

tableview->setContextMenuPolicy(Qt::CustomContextMenu);
connect(tableview,QTableView::customContextMenuRequested,this,createContextMenu);

6. QTableView的所有数据如何保存到csv?
答:思路是通过逐行扫描获取数据,关于csv逗号分隔符,就等于保存txt,只是需要添加逗号而已。

void opPanel::SaveToCSV()
{
    QString textData;
    int rows = model->rowCount();
    int columns = model->columnCount();
    // 先写入标题
    textData = "时间, 标签, 动作, 信息\n";
    // 先Table表内容
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
          textData += model->data(model->index(i,j)).toString();
          textData += ", ";  // for .csv file format
        }
        textData += "\n";
    }
    // 以时间戳命名文件
    QString fileName ;
    fileName = "report"+ QString::number(QDateTime::currentDateTime().toTime_t());
    QFile csvFile(fileName+".csv");
    // 操作文件
    if(csvFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
        QTextStream out(&csvFile);
        out << textData;
        csvFile.close();
    }
}

四,效果

image.png

效果.gif

五,小结

今天功能逻辑还没有添加完整,UI相关的功能都已完成,当前的需求已实现。基本上使用了已经学习过个各种小技术就可以完成我想要的小工具,就连UI矢量图都是我自己网上找到后,用PS通过栅格化原图,再用魔棒删除无用区域后,自己修改制作的。
厚积薄发的感觉很好!不过距离优秀上位机软件还差远了(可移植性架构设计,性能优化,UI美观等等)。我暂时只是能自制些实用小工具。

你可能感兴趣的:(20.QTableView操作及导出csv--Apple的学习笔记)