选中单元格就会触发setdata()
bool MissionModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if(!index.isValid())
return false;
亮点1
//鼠标选中的单元格是哪行哪列,3行5列
int row = index.row();
int col = index.column();
亮点2
//把改行第1个,第4个单元格数据取出来
QModelIndex m_index_name = this->index(row,1);
QModelIndex m_index_color = this->index(row,4);
QVariant missionName = this->data(m_index_name);
QVariant missionColor = this->data(m_index_color);
亮点3
//如果点中了第2列的checkbox
if (role == Qt::CheckStateRole && col == 2 )
{
//比如第1行,2列。1号发动机温度
value是单元格的内容,有时候是数字,字母,字符串,bool
QJsonObject obj = dataList[row].toObject();
obj[headtitle.at(col)] = value == Qt::Checked;
dataList[row] = obj;
//实时关注如果为真,就发信号告诉其他地方
if(obj[headtitle.at(2)].toBool() == true)
{
emit missionFollow_send(missionName, missionColor);
return true;
}
//把修改的内容存到json文件
if( !JsonTool::save_json_file<QJsonArray>(file_name, dataList) )
{
QMessageBox::information( nullptr, QStringLiteral("修改失败"), QStringLiteral("修改失败"));
}
}
else if (role == Qt::CheckStateRole && col == 3 )
{
QJsonObject obj = dataList[row].toObject();
obj[headtitle.at(col)] = value == Qt::Checked;
dataList[row] = obj;
if(obj[headtitle.at(2)].toBool() == true)
{
emit namePlate_show(missionName);
return true;
}
if( !JsonTool::save_json_file<QJsonArray>(file_name, dataList) )
{
QMessageBox::information( nullptr, QStringLiteral("修改失败"), QStringLiteral("修改失败"));
}
}
return true;
}
图1