【问题标题】:QTreeWidget for File Tree and Sub-folders用于文件树和子文件夹的 QTreeWidget
【发布时间】:2012-08-23 04:32:47
【问题描述】:

所以,我使用的是 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)来在另一个文件夹中添加文件夹?

【问题讨论】:

  • 你需要一个 QTreeWidget,还是你也可以使用一个 QTreeView 和一个 QFileSystemModel?有关示例,请参见 link
  • 您需要在添加子子文件夹时弄清楚父项,即不要将addChild()添加到您的m_projectItem,而是添加到当前在视图中选择的节点。除此之外 QFileSystemModel 可能确实是更好的选择。

标签: qt directory subdirectory qtreewidget filetree


【解决方案1】:

我假设 m_projectItem 是您的根节点。 我会实现类似于

的 addFolder 方法
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 来设置树 - 参考您的示例,以最简单的静态形式,这可能是

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

免责声明:我没有测试过代码 - 我最近在 Python 中实现了类似的东西 :)

【讨论】:

  • 好的,我知道了。谢谢!无论如何,有一个问题。假设我有一个名为“Hello”的文件夹,并且在该文件夹内还有另一个名为“Hello”的文件夹,我怎么知道我将它放在哪个文件夹中?
  • 你总是需要考虑父子关系。文件夹的名称是不够的 - 您创建“Hello”文件夹并取回 QTreeWidgetItem,然后将其用作第二个“Hello”文件夹的父级。
猜你喜欢
  • 2018-10-05
  • 1970-01-01
  • 2016-11-21
  • 2015-03-29
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多