json - 填充 QTableView 表单 JSON 数组

标签 json qt qtableview

我正在开发一个 Web 服务客户端,我可以在其中获取一组 JSON 对象,并且我想用它们填充 QTableView。 JSON 键应该是列标题,值应该是每一行数据。

JSON 数组示例:

[{"id":"1","name":"Robotina","type":"droid","year":"1970"},{"id":"2","name":"Astro Boy","type":"droid","year":"2015"},{"id":"3","name":"Terminator","type":"droid","year":"2020"},{"id":"4","name":"Bender","type":"droid","year":"3000"},{"id":"5","name":"C-3PO","type":"droid","year":"1978"},{"id":"6","name":"R2D2","type":"droid","year":"1977"},{"id":"7","name":"Mazinger Z","type":"droid","year":"1987"},{"id":"8","name":"Robocop","type":"droid","year":"1987"},{"id":"9","name":"WALL-E","type":"mechanical","year":"2200"},{"id":"10","name":"EVE","type":"mechanical","year":"2200"}]

最佳答案

我有一个类似的问题,因为我的 Json 查询作为散列数组返回。

我在这里整理了一个 QJsonTableModel:https://github.com/poulh/qjsontablemodel

QJsonTableModel::Header header;
header.push_back( QJsonTableModel::Heading( { {"title","Title"},    {"index","title"} }) );
header.push_back( QJsonTableModel::Heading( { {"title","Season"},   {"index","season"} }) );
header.push_back( QJsonTableModel::Heading( { {"title","Episode"},  {"index","episode"} }) );
header.push_back( QJsonTableModel::Heading( { {"title","Air Date"}, {"index","air_date"} }) );

episodes = new QJsonTableModel( header, this );
ui->episodeTableView->setModel( episodes );

QString json = "[{\"series\":\"Black Sails\",\"season\":1,\"episode\":1,\"title\":\"I.\",\"air_date\":\"2014-01-25\"},{\"series\":\"Black Sails\",\"season\":1,\"episode\":2,\"title\":\"II.\",\"air_date\":\"2014-02-01\"}]";
QJsonDocument jsonDocument = QJsonDocument::fromJson( json );
episodes->setJson( jsonDocument );

然后,您可以通过 QModelIndex 检索该行的 Json 对象。无论您单击哪个单元格,它都会为您提供整行的 Json 对象。
void TVTime::on_episodesTableView_doubleClicked(const QModelIndex &index)
{
    QJsonObject object = episodes->getJsonObject( index );
    qDebug() << object["title"];
}

让我知道它是否有效。

关于json - 填充 QTableView 表单 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148188/

相关文章:

python - pandas/json 中的点表示法

Qt:QTableView 如何添加一行?

c++ - 在 Qtableview 上设置具有颜色(红色/绿色/黄色)的特定单元格

json - Golang - 从 Twitch TV RESTful 服务解析 JSON 字符串数组

ios - 在 Swift 4 中解析 JSON 中的 double (例如 1.0)而不丢失小数点?

json - 无法从具有复合键的域类中获取其余API

c++ - 如何让QML窗口无边框?

c++ - 在 C++ 中快速将原始数据转换为十六进制字符串

android - Qt Creator 5.8 Android开发NDK x64位错误 "No Rule to make target.."

c++ - QDataWidgetMapper 只更新 QSqlRelationalTableModel 的第一个索引