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

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

基本上,该表必须具有4列:名称,类型,值和单位。

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

我的问题是:如何/应该在类(class)对表建模? 我之所以这样问是因为我一直在寻找QList,QVariant,QMap,QMultiMap,但我无法弄清楚如何正确使用它们,到目前为止,我发现的所有示例都没有任何帮助,至少对于我需要的去做。我看到了有关QStandardItemModel类的内容,我认为它与解决方案有关,但我不知道如何/为什么。

最重要的是,我是Qt / C++的初学者,所以Qt / C++的许多动态和术语仍然让我难以理解。

如果有人可以给我一些指导,那将是很棒的。

编辑:
这并没有引起太大的注意,我也不知道是否因为我不够清楚而已,但是无论如何,请尝试描绘一下:

  • 节点具有PropertyList
  • PropertyList列出属性的
  • 属性是字典,因为它们始终具有 4个属性和各自的值:名称:(字符串),类型:(字符串),值:( double )和单位:(字符串)。
  • 一个节点只能有一个PropertyList;一个PropertyList可以具有多个Properties。一些节点将具有3个属性,另一些节点将具有4个属性,等等...

  • 现在,通过带有QGraphicsItem的QGraphicsScene在图中表示节点。您可以访问其中具有QTableWidget的PropertiesDialog小部件。该表将显示PropertyList。

    我想知道我可以创建/定义什么样的“结构”,从而使我能够轻松地在表小部件中插入/读取数据-即,我将数据加载到Node的PropertiesList中,并显示在表小部件中;如果更改表窗口小部件中的数据,则该数据将传递到Node的PropertiesList。

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

    最佳答案

    好吧,在拉了很多头发之后,我得到了我所需要的。

    我的第一步是创建一个Property类。此类具有设置或获取名称字符串,类型字符串,值double和单位字符串的功能。

    接下来,我更新了Node类,以包括添加和删除指向PropertyQList<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中进行编辑时,这些更改应传播到类中。现在,我想我可以找到自己的路,希望这对尝试查找相关内容的任何人有所帮助。我还将更新标签,也许还要编辑标题以使其更相关/有意义。

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

    10-08 22:58