2012-08-23 44 views
1

因此,我使用的是一個用於生成文件樹的QTreeWidget。我可以輕鬆創建文件和文件夾。但是當我們談論子文件夾時就會出現問題。例如:用於文件樹和子文件夾的QTreeWidget

Folder1 
Folder1/SubFolder1 
Folder1/SubFolder1/SubFolder2 

我該如何創建子文件夾?這裏是我的代碼,以使文件夾:

void Tree::addFolder(const QString &folderName) 
{ 
    QTreeWidgetItem *item = new QTreeWidgetItem(); 
    item->setText(0, folderName); // Sets the text. 
    m_projectItem->addChild(item); // Adds it to the main path. (It's a QTreeWidgetItem) 
    this->expandItem(item); // Expands. 
} 

我會需要創建另一個功能(類似addSubFolder)要添加其他文件夾中的文件夾?

+4

你需要一個QTreeWidget,或者你能不能也用QTreeView則有QFileSystemModel?有關示例,請參見[鏈接](http://doc.qt.nokia.com/4.7-snapshot/qtreeview.html#details)。 –

+4

當您添加子子文件夾時,即不要將addChild()添加到「m_projectItem」中,而是添加到視圖中當前選定的節點時,您需要計算出父項。除此之外,QFileSystemModel可能是更好的選擇。 –

回答

2

我假設m_projectItem是你的根節點。 我將實施類似

QTreeWidgetItem* Tree::addFolder(QTreeWidgetItem* parent, const QString &folderName) { 
    QTreeWidgetItem *item = new QTreeWidgetItem(); 
    item->setText(0, folderName); // Sets the text. 
    parent->addChild(item); // Adds it to its parent (It's a QTreeWidgetItem) 
    this->expandItem(item); // Expands. 
    return item; 
} 

然後我會實現的另一種方法是通過適當地調用addFolder建立樹addFolder法 - 指的是你的榜樣,在其最簡單的靜態的形式,這可能是

void Tree::createTree() { 
    QWidgetItem* f1 = addFolder(m_projectItem, "Folder1"); 
    QWidgetItem* sf1 = addFolder(f1, "SubFolder1"); 
    addFolder(sf1, "SubFolder2"); 
} 

聲明:我沒有測試的代碼 - 我最近實施的類似的東西在Python :)

+0

好的,所以我明白了。謝謝!無論如何,都有一個問題。假設我有一個名爲「Hello」的文件夾,並在該文件夾內有另一個名爲「Hello」的文件夾,我將如何知道在哪個文件夾中放置它? – Blastcore

+0

你總是需要考慮親子關係。文件夾的名稱不夠 - 您創建「Hello」文件夾並取回QTreeWidgetItem,然後將其用作第二個「Hello」文件夾的父項。 –

相關問題