Формат QFileSystemModel setNameFilter для файлов без расширения - PullRequest
1 голос
/ 25 сентября 2019

Есть ли способ отобразить все файлы без расширения с помощью setNameFilters?Я знаю, как сделать это с файлами с несколькими расширениями (как .txt в приведенном ниже примере), но я не знаю, как это сделать, чтобы обнаружить файлы без расширения, а не с регулярным выражением, но тогда мне нужно что-товот так (чего я хочу избежать, если я могу сделать это напрямую с помощью setNameFilters):

QSortFilterProxyModel* filter = new QSortFilterProxyModel(model);
filter->setFilterRegExp(QRegExp("^([^.]+)$", Qt::CaseInsensitive));

Это пример кода:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    Filemodel = new QFileSystemModel(this);
    Filemodel->setFilter( QDir::NoDotAndDotDot | QDir::Files );

    QStringList filters;
    filters << "*.txt";

    Filemodel.setNameFilters(filters);
    Filemodel.setNameFilterDisables(false);

    ui->Filtered_tbView->setModel( Filemodel );
}

Так что в основном на setNameFilters я хочу добавитьусловие, чтобы не рассматривать файлы с точкой (я знаю, как это сделать, когда я хочу, чтобы файлы включали определенную строку - которая может быть расширением, - но не тогда, когда я хочу НЕ включать определенную строку).

1 Ответ

0 голосов
/ 28 сентября 2019

Нет, вы не можете.Единственный способ сделать это - использовать модель прокси.Вы не можете даже сделать это в QDir::setNameFilters(), либо.Объяснение следует ...

Вы пытались перечислить файлы каталога в cmd.exe?Вы можете использовать что-то вроде:

dir *.

, которое бы сработало, верно?А теперь вместо этого откройте Powershell и попробуйте сделать то же самое :-) Это не работает!Конечно, в powershell dir это псевдоним для Get-ChildItem, и есть еще один способ выразить это:

Get-ChildItem -Exclude *.*

И вы можете сделать что-то подобное в своем терминале Linux:

ls -I '*.*'

Но в классах Qt нет ничего подобного QDir, ни QFileSystemModel.Вам понадобится метод excludeNameFilter() (кстати, это было бы хорошим дополнением к Qt!).

Объяснение состоит в том, что Qt, powershell и ls используют один и тот же синтаксис глобализации и нет способа выразить на нем положительный фильтр, включающий только файлы без точек, как вы делаете это в регулярном выражении.

...