如何在QTreeWidget中为子组件创建子组件

How to make a subchild to a child in QTreeWidget?

本文关键字:组件 创建 QTreeWidget      更新时间:2023-10-16

我想这样做,以便我可以将第三级(子级)扩展为顶级项(根)下的子级。我所能做的就是为一个根创建多个子节点。

这是我的。cpp

    QStringList string1, string2;
    string1 << "xxxxxxxx" << "xxxxxxxxxxx";
    string2 << "yyyyyy" << "yy";
    m_treeWidget->insertTopLevelItem(0, new QTreeWidgetItem(string1));
    m_treeWidget->insertTopLevelItem(1, new QTreeWidgetItem(string2));

    //here I add a child
    AddChild(m_treeWidget->topLevelItem(0),"hello","world", m_treeWidget);
    //here I make two attempts to make a sub child
    AddChild(m_treeWidget->itemBelow(m_treeWidget->topLevelItem(0)),"hello_sub1","world_sub1", m_treeWidget);
    AddChild(m_treeWidget->itemAt(0,0),"hello_sub2","world_sub2", m_treeWidget);

下面是我的添加子方法也在同一个。cpp文件:

    void Dialog::AddChild (QTreeWidgetItem *parent, QString name, QString Description, QTreeWidget* treeWidget)
    {
         QTreeWidgetItem *item = new QTreeWidgetItem(treeWidget);
         item->setText(0,name);
         item->setText(1, Description);
         parent->addChild(item);
    }

为了创建树形层次结构,您可以使用QTreeWidgetItem的API,特别是它的构造函数。构造函数可以接受QTreeWidgetQTreeWidgetItem作为父对象。在第一种情况下,顶级项目将添加到树小部件中,在第二种情况下,将添加到另一项的子项目中。这个API更容易使用,因为您不需要显式地将项附加到树小部件。下面是实现这个想法的示例代码:

QStringList string1, string2;
string1 << "xxxxxxxx" << "xxxxxxxxxxx";
string2 << "yyyyyy" << "yy";
QTreeWidget tv;
// The top level items
QTreeWidgetItem *top1 = new QTreeWidgetItem(&tv, string1);
QTreeWidgetItem *top2 = new QTreeWidgetItem(&tv, string2);
// A child item.
QTreeWidgetItem *child1 =
               new QTreeWidgetItem(top1, QStringList() << "Hello" << "World");
// The grandchildren.
new QTreeWidgetItem(child1, QStringList() << "Hello_sub1" << "World_sub1");
new QTreeWidgetItem(child1, QStringList() << "Hello_sub2" << "World_sub2");

实际上我可以用另一种方法解决…

.cpp:

    //Initialize the QTreeWidget with 2 columns
    QTreeWidget m_treeWidget = new QTreeWidget();
    m_treeWidget->setColumnCount(2);
    //these are the method calls:
    AddRoot("Root1_Column1", "Root2_Column2", m_treeWidget);
    AddRoot("Root2_Column1", "Root2_Column2", m_treeWidget);
    //topLevelItem(0) makes it a child of the first root... topLevelItem(1) makes it a child of the second root
    AddChild(m_treeWidget->topLevelItem(0),"Child1_Column1","Child1_Column2"); 
    AddChild(m_treeWidget->topLevelItem(1),"Child2_Column1","Child2_Column2");
    AddSubChild(m_treeWidget->itemBelow(m_treeWidget->topLevelItem(0)),"SubChild_Column1", "SubChild_Column2");

这些是我在同一个。cpp文件中使用的方法:

    void Dialog::AddRoot (QString name, QString Description, QTreeWidget* treeWidget)
    {
       QTreeWidgetItem *item = new QTreeWidgetItem(treeWidget);
       item->setText(0,name);
       item->setText(1,Description);
       item->setExpanded(true); //expand automatically
       treeWidget->addTopLevelItem(item);
    }
    void Dialog::AddChild (QTreeWidgetItem *parent, QString name, QString Description)
    {
       QTreeWidgetItem *item = new QTreeWidgetItem();
       item->setText(0,name);
       item->setText(1, Description);
       parent->addChild(item);
    }
    void Dialog::AddSubChild (QTreeWidgetItem *parent, QString name, QString Description)
    {
       QTreeWidgetItem *item = new QTreeWidgetItem();
       item->setText(0,name);
       item->setText(1, Description);
       parent->addChild(item);
    }