填充 QTableView 表单 JSON 数组

Posted

技术标签:

【中文标题】填充 QTableView 表单 JSON 数组【英文标题】:Populate QTableView form JSON Array 【发布时间】:2014-10-01 18:34:32 【问题描述】:

我正在开发一个 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":"终结者","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 中的数据填充 QTableView (QT)?... 您必须编写代码才能做到这一点,或者找到一些第三方代码来做到这一点......因为没有 make-a-UI-table-from-JSON。您可能会发现QTableWidget 对用户更友好,因为它具有默认数据模型,您可以使用 API 函数添加数据行和列。请参阅JSON support in Qt 获取帮助来阅读您的文件。 我希望使用像 QSqlQueryModel 这样的结构但没用,相反我将使用 QTableWidget,因为您在 JSON 对象中倾倒 Suggest 和迭代数据 【参考方案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"];

让我知道它是否有效。

【讨论】:

以上是关于填充 QTableView 表单 JSON 数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSON 数据填充表单

有没有办法将 QTableView 模型转换为 QStandardItemModel

使用 Q 用异步调用填充数组

Symfony采用JSON数据和填充实体的推荐方法是什么?

上传 .csv 或 .txt 文件以填充 QTableView

从 Pandas 数据框填充 QTableView 的最快方法