【问题标题】:How to filter image files from selected directory (which is inside listWidget)如何过滤所选目录中的图像文件(在 listWidget 内)
【发布时间】:2018-07-16 07:07:54
【问题描述】:

我有一个问题,我不知道如何过滤所选目录中的图像。我通常使用directory.setNameFilters({"*.png", "*.jpg"});,但在这种情况下我不能使用它,因为我需要使用listWidget 中的选定目录。我使用信号和槽函数。我的意思是,如果我单击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);
    }
});

【问题讨论】:

    标签: c++ qt qt5 qlistwidget qt-signals


    【解决方案1】:

    您必须使用 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);
        }
    });
    

    【讨论】:

    • 天啊,我已经尝试了 3 天。 @eyllanesc 非常感谢。
    猜你喜欢
    • 2012-02-25
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多