c++ - 如何从所选目录(在 listWidget 中)过滤图像文件

标签 c++ qt qt5 qlistwidget qt-signals

我有一个问题,我不知道如何从选定的目录中过滤图像。我通常使用 directory.setNameFilters({"*.png", "*.jpg"}); 但在这种情况下我不能使用它,因为我需要在 列表控件。我使用信号和槽函数。我的意思是,如果我单击 listWidget 中的目录,则该目录中的图像将显示在另一个 listWidget 中。如果我单击另一个目录,它将执行相同的功能。请看一下我的代码。

QDir directory = QFileDialog::getExistingDirectory(this, tr("Open Directory"),"/home", QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks);
auto listWidget_images = new QListWidget();//set listwidget to display images
listWidget_images->setMinimumSize(1200,400);
listWidget_images->setViewMode(QListWidget::IconMode);
listWidget_images->setIconSize(QSize(320,240));
listWidget_images->setResizeMode(QListWidget::Adjust);

for(const QFileInfo & finfo: directory.entryInfoList()){
    ui->listWidget_dirs->addItem(finfo.absoluteFilePath());
}

connect(ui->listWidget_dirs, & QListWidget::itemClicked,[listWidget_images,this](QListWidgetItem *item)
{
    listWidget_images->show();

    directory.setNameFilters({"*.png", "*.jpg"});

    for(const QFileInfo & finfo: directory.entryInfoList()){
        QListWidgetItem *item = new QListWidgetItem(QIcon(finfo.absoluteFilePath()), finfo.fileName());
        listWidget_images->addItem(item);
    }
});

最佳答案

您必须使用 QListWidgetItem 的文本创建 QDir。

另一方面,获取子目录列表的方法是不区分文件和目录,我已经修复了那部分。

QString directory = QFileDialog::getExistingDirectory(this,
                                                      tr("Open Directory"),
                                                      QDir::homePath(),
                                                      QFileDialog::ShowDirsOnly| QFileDialog::DontResolveSymlinks);
auto listWidget_images = new QListWidget();//set listwidget to display images
listWidget_images->setMinimumSize(1200,400);
listWidget_images->setViewMode(QListWidget::IconMode);
listWidget_images->setIconSize(QSize(320,240));
listWidget_images->setResizeMode(QListWidget::Adjust);

QDirIterator diter(directory, QDir::Dirs | QDir::NoDotAndDotDot);

while (diter.hasNext()) {
    ui->listWidget_dirs->addItem(diter.next());
}


connect(ui->listWidget_dirs, &QListWidget::itemClicked,[listWidget_images](QListWidgetItem *item)
{
    listWidget_images->show();
    listWidget_images->clear();
    QDir directory(item->text());
    directory.setNameFilters({"*.png", "*.jpg"});
    for(const QFileInfo & finfo: directory.entryInfoList()){
        QListWidgetItem *item = new QListWidgetItem(QIcon(finfo.absoluteFilePath()), finfo.fileName());
        listWidget_images->addItem(item);
    }
});

关于c++ - 如何从所选目录(在 listWidget 中)过滤图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51356319/

相关文章:

c++ - const 成员上的 std::construct_at 安全吗?

c++ - 将自定义数据插入priority_queue时出现invalid heap错误

c++ - Qt 程序不工作 : The program has inexpectedly finished

c++ - 在另一个类函数中使用一个类的变量

qt - QScopedPointers 的 QList

c++ - 如何在我的应用程序级别使对话窗口始终位于最前面

c++ - VS 从 2005 年迁移到 2010 年,LNK1316 : duplicate managed resource name

c++ - 动态添加对象?

c++ - 正则表达式匹配空格,但不在 "strings"

qt - 如何在 Qt 中让应用程序看起来不错?