2014-07-09 55 views
0

我想讓它可以將第三級別(subchild)擴展到頂級項目(root)下的子級。我所能做的就是讓多個孩子成爲一個根。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); 

以下是我添加子方法也是在同一個.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); 
    } 

回答

1

爲了使樹層次結構可以使用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"); 
+0

謝謝,花了我一分鐘的時間從API中找到您正在使用的構造函數,但在這裏他們是:(任何讀者的未來參考): QTreeWidgetItem(QTreeWidget * parent,int type = Type) QTreeWidgetItem(QTreeWidgetItem * parent,int type = Type) – EricaAKrause

+0

但我必須帶走&符號。你爲什麼使用這些? – EricaAKrause

+0

因爲在我的例子中電視是一個值,而不是指針。我必須解決它。 – vahancho

0

其實我能解決這個問題的另一種方式......

中的.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

這是沒有好的編碼風格,因爲你有很多重複的代碼。 AddChild和AddSubChild甚至是相同的(邏輯和在你的代碼中)。 – jaba