gpt4 book ai didi

c++ - 从值填充 QTableWidget

转载 作者:搜寻专家 更新时间:2023-10-31 01:28:25 27 4
gpt4 key购买 nike

我有 python 和 pyside 的背景。因此,对于在 C++ 中可能出现的任何奇怪做法,我深表歉意。

enter image description here

两个问题:

  1. 我想用一组数据填充一个表,该数据集当前是一个字典列表,如我的原始 python 代码所示。这将如何转化为我的 C++ Qt 项目,以便我可以使用这些数据填充我的 tablewidget?看来Qt并没有像python一样使用字典,它使用QMap。

  2. 看起来 Qt 使用的是 QMap 变体,而不是字典。如果有更有效的方法,我愿意以不同的方式格式化数据。任何可以轻松保存到文本文件并同时从文件加载它填充 ui 的东西。值得一提的是,这些数据最终会保存到文件中并从文件中加载。这就是为什么我的旧 python 项目使用 json 作为格式。

我的目标是最终扩展我的 QTableWidget 子类以添加从文件加载和保存到文件的方法。类似于预设。

词典列表:

[
{
"key":"SHOT",
"value":"",
"description":"Current Shot node name",
},
{
"key":"PASS",
"value":"",
"description":"Current Pass node name",
},
{
"key":"SELF",
"value":"",
"description":"Current node name",
},
{
"key":"MM",
"value":"",
"description":"Current month as integer ex: 12",
},
{
"key":"DD",
"value":"",
"description":"Current day as integer ex: 07",
}
]

cpp

#include "tokeneditor.h"
#include <QTableWidget>
#include <QVBoxLayout>

TokenEditor::TokenEditor(QWidget *parent) : QWidget(parent)
{
// Controls
QTableWidget *ui_userTokens = new QTableWidget();

// Layout
QVBoxLayout * layout = new QVBoxLayout();
layout->setMargin(0);
layout->setSpacing(0);
layout->addWidget(ui_userTokens);
setLayout(layout);

// populate table with data...
}

最佳答案

如评论中所述,Qt 支持 Json,在下一部分中,我将向您展示一个示例,此外,您应该考虑到 C++ 提供了处理内存的自由,因此在 Qt 的情况下,如有必要,请考虑消除它很多时候,它通过亲属关系树将责任交给 Qt。

*.h

#ifndef TOKENEDITOR_H
#define TOKENEDITOR_H

#include <QWidget>

class QTableWidget;

class TokenEditor : public QWidget
{
Q_OBJECT

public:
explicit TokenEditor(QWidget *parent = nullptr);
~TokenEditor();

private:
QTableWidget *ui_userTokens;
};

#endif // TOKENEDITOR_H

*.cpp

#include "tokeneditor.h"

#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>

#include <QTableWidget>
#include <QVBoxLayout>

TokenEditor::TokenEditor(QWidget *parent) :
QWidget(parent),
ui_userTokens(new QTableWidget)
{
const std::string json = R"([{
"key": "SHOT",
"value": "",
"description": "Current Shot node name"
},
{
"key": "PASS",
"value": "",
"description": "Current Pass node name"
},
{
"key": "SELF",
"value": "",
"description": "Current node name"
},
{
"key": "MM",
"value": "",
"description": "Current month as integer ex: 12"
},
{
"key": "DD",
"value": "",
"description": "Current day as integer ex: 07"
}
])";

QJsonDocument doc = QJsonDocument::fromJson(QByteArray::fromStdString(json));

auto layout = new QVBoxLayout(this);
layout->setMargin(0);
layout->setSpacing(0);
layout->addWidget(ui_userTokens);

ui_userTokens->setRowCount(5);
ui_userTokens->setColumnCount(3);
ui_userTokens->setHorizontalHeaderLabels({"key", "value", "description"});

int r=0;
for(const QJsonValue & val : doc.array()){
QJsonObject obj = val.toObject();
int c=0;
for(const QString & key: obj.keys()){
auto *it = new QTableWidgetItem(obj[key].toString());
ui_userTokens->setItem(r, c, it);
c++;
}
r++;
}
}

TokenEditor::~TokenEditor()
{
}

enter image description here

关于c++ - 从值填充 QTableWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52301744/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com