Фильтрация файлов, возвращаемых окном поиска QT

0
QString search = ui->searchComboBox->currentText();
if(search.isEmpty()){
    search = "*";
}

files = currentDirectory.entryList(QStringList(search),
    QDir::Files | QDir::NoSymLinks);

Этот код возвращает файлы, когда поиск QString пуст. Однако, когда я ввожу какой-либо текст в searchComboBox, результатов нет.

Например, если в каталоге, который я ищу, называется "don300.png", и я ищу "дон", я не получаю никаких результатов.

Не знаете, как это работает при попытке поиска строки в любом месте имени файла?

Теги:
qt

1 ответ

1
Лучший ответ

Шаблон поиска без подстановочных знаков будет выполнять точное совпадение. В вашем случае, если текстовое поле не пустое, оно будет совпадать только с этим именем. Просто измените свой код на:

QString search = ui->searchComboBox->currentText() + "*";
files = currentDirectory.entryList(QStringList(search),
    QDir::Files | QDir::NoSymLinks);

Если searchComboBox пуст, поиск будет * и если вы предоставите фильтр, то шаблон поиска будет (например) don* (сопоставление всех файлов, начинающихся с don).

В общем, вы можете захотеть совместить текст более свободно, чтобы вы могли использовать это:

QString search = ui->searchComboBox->currentText();
if(search.isEmpty()) {
    search = "*";
} else {
    search = "*" + search + "*";
}

files = currentDirectory.entryList(QStringList(search),
    QDir::Files | QDir::NoSymLinks);

Только для справки:

    Search pattern    Results
    *                 Any file.
    don*              Files that begin with "don".
    *don*             Files that contain "don".
  • 0
    Это отличный ответ и объяснение. Я пытался использовать% для подстановочных знаков, поскольку это то, что я использовал на других языках, но это не сработало. Мне нужно было знать, что * используется для этого! Работает отлично, спасибо :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню