Russian Qt Forum

Qt => Model-View (MV) => Тема начата: kizza от Июль 21, 2011, 01:42



Название: QFileSystemModel не не обновляется с шарами samba
Отправлено: kizza от Июль 21, 2011, 01:42
QString flPath = "\\\\XXX.XXX.XXX.XXX\\myshare\\"

QFileSystemModel *fileModel= new QFileSystemMode();
QListView *fileList=  new QListView();
fileList->setModel(fileModel);
fileList->setRootIndex(fileModel->setRootPath(flPath));

модель прикручиваем к windows шаре
все работает но есть маленькое "НО" не обновляется при изменении модели
т.е. например при создании или удалении файла, после перезапуска окна все видно.
При flPath равном например "c:\\" все замечательно работает и обновляется...
Есть ли способ решить проблему?


Название: Re: QFileSystemModel не не обновляется с шарами samba
Отправлено: Авварон от Июль 21, 2011, 01:44
И не будет, на сетевые шары не вешается вотчер.


Название: Re: QFileSystemModel не не обновляется с шарами samba
Отправлено: kizza от Июль 21, 2011, 08:27
Может есть предложения.... куда копать ....
У меня только вертится "вручную" дергать модель после любых изменений, например fileModel->update (но такого метода нет) а каким методом перечитывать пока не нашел.


Название: Re: QFileSystemModel не не обновляется с шарами samba
Отправлено: Авварон от Июль 21, 2011, 13:25
Да, так и надо делать. Ручной апдейт там легко делается (я делал) - надо дергать слот какой-то (типа обновиДир(QString), к-ый дергается вотчером.


Название: Re: QFileSystemModel не не обновляется с шарами samba
Отправлено: kizza от Июль 22, 2011, 09:27
Обнаружился еще один неприятный момент  не открываются файлы (с smb шары) с помощью: QDesktopServices::openUrl(QUrl::fromLocalFile(fileModel->filePath(idxFile)));
и опять таки локально все работает... :(


Название: Re: QFileSystemModel не не обновляется с шарами samba
Отправлено: Alex_ryabis от Июнь 06, 2023, 20:13
Да, так и надо делать. Ручной апдейт там легко делается (я делал) - надо дергать слот какой-то (типа обновиДир(QString), к-ый дергается вотчером.
Тема умерла, а вопрос для меня стал актуален!
Можно поподробнее, как вручную обновить QFileSystemModel?
Создаю model в конструкторе:
Код:
    model = new QFileSystemModel(this);
    model->setFilter(QDir::AllEntries);
    model->setRootPath("");
    ui->listView->setModel(model);
Затем, обрабатываю клики:
Код:
void TWgtFileList::on_listView_clicked(const QModelIndex &index)
{
    QFileInfo fileInfo = model->fileInfo(index);
    if (fileInfo.fileName() == "..")
    {
        QDir dir = fileInfo.dir();
        dir.cdUp();
        ui->listView->setRootIndex(model->index(dir.absolutePath()));
        ui->lblPath->setText(model->filePath(ui->listView->rootIndex()));
    }
    else if (fileInfo.fileName() == ".")
    {
        ui->listView->setRootIndex(model->index(""));
        ui->lblPath->setText(model->filePath(ui->listView->rootIndex()));
    }
    else if (fileInfo.isDir())
    {
        QString str = model->filePath(ui->listView->rootIndex());
        ui->listView->setRootIndex(index);
        ui->lblPath->setText(str);
    }
    else if (fileInfo.isFile())
        fName = fileInfo.absoluteFilePath();
}

Если одновременно записать файл в сетевую папку, она в модели не обновляется. Что надо "дёрнуть"?