在Qt中填充表格

时间:2013-06-04 12:05:08

标签: c++ qt qtablewidget qtablewidgetitem

我正在尝试改进图表编辑器的this示例。

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

基本上该表必须有4列: name type value unit

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

我的问题是:我怎样才能/应该在类级别对表进行建模?我问这个因为我一直在寻找QList,QVariant,QMap,QMultiMap而我无法弄清楚正确使用它们,到目前为止我找到的所有例子都没有任何帮助,至少我需要做什么。我看到了关于QStandardItemModel类的一些内容,我认为它与解决方案有关,但我无法理解如何/为什么。

最重要的是,我是Qt / C ++的初学者,Qt / C ++中的大部分动态和术语仍然让我望而却步。

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

修改 这并没有得到太多的关注,我不知道它是否因为我不够清楚,但无论如何,试着想象一下:

  • 节点有一个 PropertyList
  • PropertyList 列出属性
  • 属性是一种字典,因为它们具有始终 4个属性和相应的值: name :( string), type :(字符串), :(双倍)和单位 :(字符串)。
  • 一个节点只能有一个 PropertyList ; PropertyList 可以有多个属性。一些节点将有3个属性,其他<4>等等......

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

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

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

1 个答案:

答案 0 :(得分:3)

好吧,经过大量的拔毛后,我得到了我需要的东西。

我的第一步是创建一个Property类。此类具有设置或获取名称字符串,类型字符串, 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中进行编辑时,这些更改应传播到类。现在我想我可以找到自己的方式,希望这有助于任何人试图找到相关的东西。我还将更新标签,并可能编辑标题以使其更具相关性/意义。