Search code examples
c++qtqtreewidgetqtreewidgetitem

How to make a subchild to a child in QTreeWidget?


I want to make it so that I can expand a third level (subchild) to a child under the top level item (root). All I've been able to do is make multiple children to a single root.

this is in my .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);

The following is my Add Child Method also in the same .cpp file:

    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);
    }

Solution

  • In order to make a tree hierarchy you can use the QTreeWidgetItem's API, especially its constructors. Constructors can accept either QTreeWidget or QTreeWidgetItem as a parent object. In the first case, the top level item will be added to the tree widget and in the second case - child item of another item. This API is easier to use because you don't need to explicitly append items to the tree widget. Here is the sample code that implements the idea:

    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");