Вывод .tif файлов после выбора папки из QComboBox

222
26 января 2018, 23:19

Необходимо при выборе папки из QComboBox, показать файлы .tif из данной папки в listView. При запуске программы, загружаю доступные папки в указанной директории.

QDir path("/home/dev/test-project/");
QStringList files = path.entryList(QDir::Dirs);
ui->cB_Karte->addItems(files);

На данном скриншоте видны все файлы и папки, нужны только .tif файлы без их расшерения.

Какой ивент нужно указать QComboBox, чтобы при выборе он показывал файлы .tif в listView?

При нажатии на файл в listView - как выполнить другую функцию?

Использовать можно и не ListView.

В данный момент сделал следующие:

void MainWindow::on_cB_Karte_currentIndexChanged(const QString &arg1)
{
    //TODO currentPath editieren
    ui->treeView->clear();
    folderPath = QDir::currentPath();
    folderDir = QDir(folderPath);
    QFileInfoList pngList = folderDir.entryInfoList(QStringList("*.tif"), QDir::Files | QDir::NoDotAndDotDot);
    for(const auto &item : pngList){
        ui->treeView->addItem(item.fileName());
    }
}

При выполнении кода выше, не добавляется новый файл с выбраной папки.

Answer 1

Проще всего использовать QFileSystemModel.

class Widget: public QWidget {
    Q_OBJECT
    QComboBox *cb;
    QListView *list;
    QFileInfoList paths;
    QFileSystemModel *fs;
public:
    explicit Widget (QWidget *parent);
public slots:
    void changeModelIndex(int index);
    // ...
};
// ...
Widget::Widget (QWidget *parent): QWidget(parent) {
    // ...
    cb = new QComboBox (this);
    QDir path("/home/dev/test-project/");
    paths = path.entryInfoList(QDir::Dirs);
    cb = new QComboBox (this);
    for (const auto& fi:paths) {
        cb->addItem (fi.fileName());
    }
    connect (cb, SIGNAL(currentIndexChanged(int)), this, SLOT(changeModelIndex(int));
    fs = new QFileSystemModel (this);
    fs->setNameFilters({"*.tiff"});
    fs->setFilters(QDir::Files);
    list = new QListView (this);
    list->setModel (fs);
    // ...
}
void Widget::changeModelIndex(int index) {
    fs->setRootDirectory (paths[index]);
}

Пример собран наспех и может содержать ошибки, но показаны все основные моменты.

READ ALSO
Русский текст из getwindowtext

Русский текст из getwindowtext

В Qt 48 вызываю функцию getwindowtext, которая во второй параметр выдает заголовок окна

221
ошибка expected primary expression

ошибка expected primary expression

Ошибка в коде в классе DRIVER внизу кода

268
Нужен пример реализации (С++, векторы)

Нужен пример реализации (С++, векторы)

Здравствуйте! Нужна помощь в реализации данного задания, желательно с объяснением, тк

219
Подключение к Unix серверу с PostgreSQL через libssh

Подключение к Unix серверу с PostgreSQL через libssh

Имеется сервер с UbuntuНа нем установлена PostgreSQL

207