gpt4 book ai didi

c++ - 在 Qt 中填充表格

转载 作者:行者123 更新时间:2023-11-30 01:58:45 27 4
gpt4 key购买 nike

我正在努力改进 this图表编辑器示例。

该示例使用了一个 nodes 类,其中包含一些与我的需求无关的属性。现在我想向这个 node 类添加一个“数组列表”,以便随后在“属性”对话框中填充 QTableView。我已经用 QTableView 设计了属性对话框。我什至不确定这是否可行/是否有意义。

基本上,表格必须有 4 列:名称类型单位

表格的每一行都是我需要节点拥有的某个“属性”。

我的问题是:我如何/应该如何在类级别对表建模?我问这个是因为我一直在寻找 QList、QVariant、QMap、QMultiMap,但我无法弄清楚正确使用它们,到目前为止我发现的示例都没有任何帮助,至少对于我需要做的事情。我看到了关于 QStandardItemModel 的信息类,我认为它与解决方案有关,但我不明白如何/为什么。

最重要的是,我是一个 Qt/C++ 初学者,Qt/C++ 中的许多动态和行话仍然让我难以理解。

如果有人能给我一些指示,那就太好了。

编辑:这一点没有引起太多关注,我不知道是不是因为我不够清楚,但无论如何,试着想象一下:

  • 一个节点有一个PropertyList
  • PropertyList 列出属性
  • Properties 是一种字典,因为它们总是 4 个属性和各自的值:name:(string), type :(string), value:(double) and unit:(string).
  • 一个Node只能有一个PropertyList;一个PropertyList 可以有多个Properties。一些节点将有 3 个属性,其他的将有 4 个,等等......

现在,节点 通过带有 QGraphicsItem 的 QGraphicsScene 在图表中表示。您可以访问其中包含 QTableWidgetPropertiesDialog 小部件。此表将显示 PropertyList

我想知道我可以创建/定义哪种“结构”,使我能够轻松地在表小部件中插入/读取数据 - 即,我将数据加载到 PropertiesList Node 并且它显示在表格小部件中;如果我更改表小部件中的数据,它会传递到 NodePropertiesList

希望这有助于消除可能出现的任何疑问。

最佳答案

好吧,经过大量的努力,我得到了我需要的东西。

我的第一步是创建一个 Property类(class)。此类具有设置或获取名称 字符串、类型 字符串、 double 和单位 的函数字符串。

接下来,我更新了 Node包含添加和删除函数的类 Property指向 QList<Property *> 的对象指针.还包括一个 listProperties返回所有 Property 的函数来自某个 Node 的对象.

在此之后,填充 QTableWidget 的函数与某个Node的属性编码如下:

    propertiesList = node->listMyProperties();

for (int row = 0; row < propertiesList.size(); ++row) {
Property *property = propertiesList.at(row);
addRow();
tableWidget->item(row, 0)->setData(Qt::DisplayRole, property->propertyName());
tableWidget->item(row, 1)->setData(Qt::DisplayRole, property->propertyType());
tableWidget->item(row, 2)->setData(Qt::DisplayRole, property->propertyValue());
tableWidget->item(row, 3)->setData(Qt::DisplayRole, property->propertyUnit());
}

还有 addRow()功能:

void PropertiesDialog::addRow()
{
int row = tableWidget->rowCount();

tableWidget->insertRow(row);

QTableWidgetItem *item0 = new QTableWidgetItem;
item0->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
tableWidget->setItem(row, 0, item0);

QTableWidgetItem *item1 = new QTableWidgetItem;
item1->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
tableWidget->setItem(row, 1, item1);

QTableWidgetItem *item2 = new QTableWidgetItem;
item2->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
tableWidget->setItem(row, 2, item2);

QTableWidgetItem *item3 = new QTableWidgetItem;
item3->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
tableWidget->setItem(row, 3, item3);

tableWidget->setCurrentItem(item0);
}

这产生了我需要的东西:有一个类来保存与每个节点相关的属性值,并将它们呈现在 QTableWidget 上.下一步是制作反向路径,意思是,当在 QTableWidget 中进行编辑时,这些更改应该传播到类(class)。现在我想我可以找到自己的方式,希望这可以帮助任何试图找到相关内容的人。我还将更新标签并可能会编辑标题以使其更相关/更有意义。

关于c++ - 在 Qt 中填充表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16917344/

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