利用QTableView展示JSON

如何在QT中创建一个json文件 将这个json作为入参 通过post方法发送给URL
然后URL将返回一个反参 格式也是json
将这个反参的json数据 展示在tableview和lineedit控件上

这篇文章看一下:


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

你把效果发给我看一下

之前用到的 可参考

QString _valueStr = ui.tableWidget_MaterialLibrary->item(row, 2)->text();
    if (_valueStr == "{}"||_valueStr=="")
        return;
    QStringList valueList = _valueStr.split(",", QString::SkipEmptyParts);
    foreach(QString value, valueList) 
    {
        QString attribute = value.split(":").at(0);
        if (attribute[0] == "{")
            attribute = attribute.mid(1);
        QString val = value.split(":").at(1);
        if (val[val.size() - 1] == "}")
            val = val.left(val.size() - 1);
        if (attribute == "\"ctracc\"")
            ui.lineEdit->setText(val);
        else if (attribute == "\"rotacc\"") 
            ui.lineEdit_2->setText(val);
        else if (attribute == "\"rotmaxrev\"")
            ui.lineEdit_3->setText(val);
        else if (attribute == "\"liftrev\"")
            ui.lineEdit_4->setText(val);
        else if (attribute == "\"fallrev\"")
            ui.lineEdit_5->setText(val);

【以下回答由 GPT 生成】

首先,使用Qt中的网络模块来获取HTTP中的JSON数据。可以使用QNetworkAccessManager类来发送HTTP请求,并使用QNetworkReply类来接收响应。可以参考以下代码:

import requests

def fetch_json_data(url):
    response = requests.get(url)
    return response.json()

创建一个函数fetch_json_data,传入一个url参数,该函数会发送HTTP GET请求并返回服务器响应的JSON数据。

接下来,将获取的JSON数据展示在QTableView中。在Qt中,可以使用QAbstractTableModel作为数据模型,然后将该模型绑定到QTableView上。可以参考以下代码:

from PyQt5 import QtCore, QtGui
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView

class JSONTableModel(QtCore.QAbstractTableModel):
    def __init__(self, data):
        super().__init__()
        self.data = data

    def rowCount(self, parent):
        return len(self.data)

    def columnCount(self, parent):
        return len(self.data[0])

    def data(self, index, role):
        if role == QtCore.Qt.DisplayRole:
            row = index.row()
            column = index.column()
            value = self.data[row][column]
            return str(value)

    def headerData(self, section, orientation, role):
        if role == QtCore.Qt.DisplayRole:
            if orientation == QtCore.Qt.Horizontal:
                return "Column {}".format(section+1)
            else:
                return "Row {}".format(section+1)


def show_json_data(json_data):
    app = QApplication([])
    table_view = QTableView()
    table_model = JSONTableModel(json_data)
    table_view.setModel(table_model)
    table_view.show()
    app.exec_()

创建一个继承自QAbstractTableModel的自定义模型JSONTableModel,重写rowCount、columnCount、data和headerData方法。 在show_json_data函数中,创建一个QApplication实例,然后创建一个QTableView实例table_view和JSONTableModel实例table_model,将table_model绑定到table_view上,并显示出来。

最后,根据需求同时在lineedit控件中展示JSON的其他数据。根据具体的需求,可以在QMainWindow中添加多个QLineEdit,并在获取JSON数据后使用相关的键来设置该控件的文本。以下是一个示例:

from PyQt5.QtWidgets import QLineEdit, QMainWindow

class MainWindow(QMainWindow):
    def __init__(self, json_data):
        super().__init__()
        self.json_data = json_data

        self.lineEdit1 = QLineEdit()
        self.lineEdit2 = QLineEdit()

        self.setup_ui()

    def setup_ui(self):
        # 根据json_data设置lineEdit的文本
        self.lineEdit1.setText(self.json_data['key1'])
        self.lineEdit2.setText(self.json_data['key2'])

        # 其他控件的设置...

        self.setCentralWidget(self.lineEdit1)

json_data = fetch_json_data("http://example.com/api")
main_window = MainWindow(json_data)
main_window.show()

在MainWindow类的构造函数中,获取到JSON数据后,可以根据具体的JSON结构使用相关的键来设置lineedit控件的文本。

综上所述,使用上述代码可以实现从HTTP中获取JSON数据,并将其展示在QTableView和lineedit控件中。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^