一,前言
发现了身边的需求,我准备为此做个小工具。包括信息输出及绘制波形图。今天先解决表格信息显示。
二,需求
按钮触发添加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<QPushButton *>(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美观等等)。我暂时只是能自制些实用小工具。