填充QTableView表单JSON数组

时间:2014-10-01 18:34:33

标签: json qt qtableview

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

JSON数组示例:

  

[{" ID":" 1""名称":" Robotina""类型&#34 ;: "机器人""一年":" 1970"},{" ID":" 2"&#34 ;姓名":"阿童木","键入":" droid","年":" 2015&#34 ;},{" ID":" 3""名称":"终结者""类型":& #34;机器人""一年":" 2020"},{" ID":" 4""名称":"德尔""类型":"机器人""一年":" 3000"} ,{" ID":" 5""名称":" C-3PO""类型":& #34;机器人""一年":" 1978"},{" ID":" 6""名称":" R2D2""类型":"机器人""一年":" 1977年"} ,{" id":" 7"," name":" Mazinger Z"," type":&# 34;机器人""一年":" 1987"},{" ID":" 8""名称& #34;:"机械战警""类型":"机器人""一年":" 1987"}, {" ID":" 9" "名称":" WALL-E""类型":"机械""一年":&# 34; 2200"},{" ID":" 10""名称":" EVE""类型& #34;:"机械""一年":" 2200"}]

1 个答案:

答案 0 :(得分:1)

我遇到了类似的问题,因为我的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"];
}

让我知道它是否有效。