2013-07-23 7 views
1

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

Пробовал с помощью кнопки обновления, чтобы добиться этого с помощью слота, чтобы удалить модель и снова установить ее в 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); 
} 
+0

Может быть, я прочитал psot неправильно, проблема в том, что не диски DonT apper, но ширину столбцов? – Trompa

+0

Если модель обновлена ​​с приводами, нет необходимости возвращать модель в представление, поэтому я не получу проблему ширины столбца. оба связаны между собой. – Prady

+1

Вы пробовали использовать 'void QHeaderView :: setSectionResizeMode (int logicalIndex, режим ResizeMode)'? – Trompa

ответ

0

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

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

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

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

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

Просто измените режим изменения размера с:

void QHeaderView::setSectionResizeMode(int logicalIndex, ResizeMode mode) 
+0

Нет Я пробовал, чтобы это не было полезно в этом случае. – Prady

Смежные вопросы