如何从文件夹中获取文件名,并将它们添加到QT中的孩子中

How to get names of files from a folder and add them to a tree widget as children in qt

本文关键字:添加 QT 孩子 文件夹 获取 文件名      更新时间:2023-10-16

我正在制作一个程序,该程序需要能够从特定文件夹中输出特定文件夹的名称作为树小部件中的项目,但我似乎无法弄清楚。我设法在没有太多麻烦的情况下在列表小部件中执行此操作,但我无法让该代码与树小部件一起使用。以下是我编写的代码,以获取使用列表widget

的描述功能

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
   QString path = "C:/Program Files/GUI_Project/bin";
    QDir dir(path);
    if (!dir.exists())
        {
            dir.mkpath(path);
        }
    QDir myPath(path);
    myPath.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot);
    MyList = myPath.entryList();
    ui->listWidget->addItems(MyList);
}

另一个选项是使用QFileSystemModel并使用setRootPath("your/path")创建文件夹的模型。您可以使用setFilter()来确定显示的内容列表。然后可以将该模型添加到QTreeView。就像QTreeWidget一样,它的性能要好得多,并且在大多数用例IMO中是更好的选择。例如,如果从该目录中添加或删除文件,则该模型将在您的程序中更改和更新。QTreeWidget无法做到。

QFileSystemModel *dirModel = new QFileSystemModel(); //Create new model
dirModel->setRootPath("C:/Program Files/GUI_Project/bin"); //Set model path
dirModel->setFilter(QDir::Files); //Only show files
ui->treeView->setModel(dirModel); //Add model to QTreeView
QModelIndex idx = dirModel->index("C:/Program Files/GUI_Project/bin"); //Set the root item
ui->treeView->setRootIndex(idx);

但是,如果要坚持使用QTreeWidget,则必须在文件夹中递归迭代并单独添加每个项目。

您只需在输入列表上迭代并为每个条目创建一个QTreeWidgetItem对象。

如果您将树小部件作为父行为,它将成为树中的顶级项目,如果您将另一个树小部件作为父属,它将变成该项目的儿童条目。