как обновить QFileSystemModel при добавлении/удалении диска?

Я использую QFileSystemModel с QTreeView для отображения содержимого корневого каталога, теперь хочу обновить qtreeview всякий раз, когда диск добавляется или удаляется.

Попытался с помощью кнопки обновления, чтобы добиться этого с помощью слота, чтобы удалить модель и снова установить ее в QTreeView. но проблема здесь в том, что ширина столбца не расширяется до его содержимого после установки модели в представление во второй раз.

есть ли лучшее решение для достижения этого. вот кусок кода...

QTreeView fileExplorerTreeView = new QTreeView();
fileExplorerTreeView->setEditTriggers(QAbstractItemView::NoEditTriggers);
fileExplorerTreeView->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);

void loadFileExplorer()
{
    if(fileSystemModel)
    {
        delete fileSystemModel;
        fileSystemModel = 0;
     }

    fileSystemModel = new QFileSystemModel;
    fileSystemModel->setRootPath("");


    fileExplorerTreeView->setModel(fileSystemModel);

    QHeaderView* hHeader = fileExplorerTreeView->header();
    hHeader->hideSection(1);
    hHeader->hideSection(2);
    hHeader->hideSection(3);

    fileExplorerTreeView->resizeColumnToContents(0);
    fileExplorerTreeView->header()->setStretchLastSection(false);
}

person Prady    schedule 23.07.2013    source источник
comment
Может быть, я неправильно прочитал psot, проблема не в том, что диски не отображаются, а в ширине столбцов?   -  person trompa    schedule 23.07.2013
comment
если модель обновляется с помощью дисков, нет необходимости сбрасывать модель до представления, поэтому у меня не будет проблемы с шириной столбца. оба связаны.   -  person Prady    schedule 24.07.2013
comment
Вы пробовали с void QHeaderView::setSectionResizeMode(int logicalIndex, ResizeMode mode)?   -  person trompa    schedule 24.07.2013
comment
Да, спасибо Тромпа.. Я добавил headerView-›setResizeMode(QHeaderView::ResizeToContents); он работает нормально ... это может быть ответ, пожалуйста, добавьте это в свой ответ, я приму это.   -  person Prady    schedule 02.08.2013


Ответы (1)


Проблема в том, что модель не следит за изменениями fs и не обновляется. И вы хотите его контролировать на более высоком уровне.

Итак, если вы установите корневой путь к моему компьютеру, он должен работать:

QString rPath = fileSystemModel->myComputer().toString(); 
fileSystemModel->setRootPath(rPath);

Здесь была аналогичная проблема (изменение фильтров не обновляло модель) решил таким образом.

Кроме того, вам не нужно изменять размер таблицы при каждом изменении.

Просто измените режим изменения размера с помощью:

void QHeaderView::setSectionResizeMode(int logicalIndex, ResizeMode mode)
person trompa    schedule 23.07.2013