根据协议里的格式,dev_task
是一个由 int32
和 string
组成的 map,即键值对集合。每个键值对包含一个任务号和其对应的 json 任务信息。
你的代码使用了迭代器遍历所有任务,并将其压入 tablewidget 的一列中。其中 i
代表行数,而 4+cloumn_size +
则代表列数。
如果你想要将每个键值对分别放置在不同的单元格中,需要修改该部分代码:
QString data_task = QString::number(it->first) + ":" + QString::fromStdString(it->second);
QTableWidgetItem* item_data_task = new QTableWidgetItem(data_task);
ui->tableWidget_agvDevice->setItem(i, 4+cloumn_size +, item_data_task);
改为:
int column_index = 4 + cloumn_size; // 列数
for (auto it = WCSMonitor_pb.wcs_info(i).dev_task().cbegin(); it != WCSMonitor_pb.wcs_info(i).dev_task().cend(); it++)
{
// 获取任务号和json任务信息
int task_id = it->first;
std::string task_info_str = it->second;
// 将json字符串转化为QJsonObject对象
QJsonDocument json_doc = QJsonDocument::fromJson(QByteArray(task_info_str.c_str()));
QJsonObject json_obj = json_doc.object();
// 在tablewidget中创建新行并填充数据
ui->tableWidget_agvDevice->insertRow(ui->tableWidget_agvDevice->rowCount());
ui->tableWidget_agvDevice->setItem(i, column_index++, new QTableWidgetItem(QString::number(task_id)));
ui->tableWidget_agvDevice->setItem(i, column_index++, new QTableWidgetItem(json_obj.value("name").toString()));
ui->tableWidget_agvDevice->setItem(i, column_index++, new QTableWidgetItem(json_obj.value("type").toString()));
}
这段代码会将每个键值对分别放在 tablewidget 中的不同单元格中,其中 task_id
代表任务号,json_obj
则是一个由 json 字符串转化而来的 QJsonObject 对象。这里我默认了 json 数据中包含有 “name” 和 “type” 两个字段,并且使用了 insertRow() 方法来插入新行。