Qt c ++ Как сделать дочернего ребенка дочерним в QTreeWidget

Я хочу сделать так, чтобы я мог расширить третий уровень (дочерний элемент) до дочернего элемента под элементом верхнего уровня (корневой). Все, что я смог сделать, это сделать несколько детей одним корнем.

это в моем .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);

Ниже приведен мой метод Add Child также в том же файле .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);
}

0

Решение

Для создания иерархии деревьев вы можете использовать QTreeWidgetItemAPI, особенно его конструкторы. Конструкторы могут принять либо QTreeWidget или же QTreeWidgetItem как родительский объект. В первом случае элемент верхнего уровня будет добавлен в виджет дерева, а во втором — дочерний элемент другого элемента. Этот 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");
1

Другие решения

На самом деле я смог решить это по-другому …

в .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);
}
0

По вопросам рекламы [email protected]