Russian Qt Forum

Qt => Вопросы новичков => Тема начата: koldun90 от Декабрь 29, 2014, 12:25



Название: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: koldun90 от Декабрь 29, 2014, 12:25
Здравствуйте такая проблема
когда я использовал QFileSystemModel этот код работал без ошибок
переход в папку при двойном клике
Код:
void MainWindow::on_listView_3_doubleClicked(const QModelIndex &index)  
{
    //model1--qfilesystemmodel
    QString str=model1->fileInfo(index).absoluteFilePath();
    ui->listView_3->setRootIndex(model1->index(str));     
    ui->textEdit->setText(str);
}
но когда я свою QFileSystemModel обернул в QSortFilterProxyModel
код вызывает краш
Код:
QString str=model1->fileInfo(index).absoluteFilePath();
вопрос как мне взять полный путь индекса при двойном клике по listview
если модель QFileSystemModel обернута в QSortFilterProxyModel?



Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: Пантер от Декабрь 29, 2014, 12:28
Если используешь прокси, нужно корретировать индексы. Смотри mapToSource и mapFromSource.


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: koldun90 от Декабрь 29, 2014, 13:18
если я делаю вот так
Код:
void MainWindow::on_listView_3_doubleClicked(const QModelIndex &index)  
{
      ui->tableview->setRootIndex(sortmodel->mapFromSource(index))   
}

то пишет в выводе
 index from wrong model passed to mapToSource

sortmodel--это QSortFilterProxyModel


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: koldun90 от Декабрь 29, 2014, 13:32
что можно сделать


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: Пантер от Декабрь 29, 2014, 13:37
Код
C++ (Qt)
ui->tableview->setRootIndex(sortmodel->mapToSource(index))    
 


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: koldun90 от Декабрь 29, 2014, 13:43
а если пишу как выше вы сказали
index must be from the currently set model


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: koldun90 от Декабрь 29, 2014, 13:45
Вот полный код
Код:
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    model1=new QFileSystemModel();
    model1->setFilter(QDir::Files | QDir::AllDirs);
    model1->setRootPath(QDir::homePath());
  
    ui->tableView->setSortingEnabled(true);
    sortmodel=new MySortFilterProxyModel();
    sortmodel->setSourceModel(model1);
    ui->tableView->setModel(sortmodel);
    ui->treeView->setModel(sortmodel);
  

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_tableView_doubleClicked(const QModelIndex &index)
{

    ui->tableView->setRootIndex(sortmodel->mapToSource(index));
    //ui->tableView->setRootIndex(sortmodel->mapFromSource(index));
}


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: Пантер от Декабрь 29, 2014, 14:05
Не, смотри, в слоте on_tableView_doubleClicked нужно напрямую юзать index, не надо его маппить. А вот если данные какие-то хочешь из модели извлечь по индексу, тогда мапь его.


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: koldun90 от Декабрь 29, 2014, 14:28
Код:
ui->tableView->setRootIndex(index);
так работает)


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: koldun90 от Декабрь 29, 2014, 17:15
Вообщем проблема такая запускаю прогу.
Захожу в какой нибудь каталог он этот каталог открывает.
Потом нажимаю папку с ..(перехожу обратно).
А потом допустим открываю другую папку. У меня модель сбрасывается как бы пустой экран в tableview...
А в отладчике пишет информацию
Цитировать
QInotifyFileSystemWatcherEngine::addPaths: inotify_add_watch failed: Нет такого файла или каталога
QFileSystemWatcher: failed to add paths: sdfsdf
в данном случае я пытался открыть папку /sdfsdf
такая папка есть и станд менеджер ее видит)
что это может быть?


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: Пантер от Декабрь 30, 2014, 08:08
Обычно такое происходит если нет прав на просмотр данного каталога... С помощью QDir можно посмотреть в нем файлы?


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: koldun90 от Декабрь 30, 2014, 10:36
права на просмотр каталога у меня есть так как я  пишу прогу под rootом
я проверил все почему то модель валится  не пойму почему хотя все папки в стандартном менеджере открываются
в случае если не использовать прокси модель при таком коде
Код:
void MainWindow::on_tableView_doubleClicked(const QModelIndex &index)
{

    QString hh=model1->fileInfo(index).absolutefilepatch;// беру полный путь папки
     ui->tableview->setRootIndex(model1->index(hh));

}
при таком коде никаких сваливаний нет
model1-QFileSystemModel

что можно еще сделать....


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: Пантер от Декабрь 30, 2014, 11:29
Ну, блин, я же писал
Код
C++ (Qt)
const QString hh= model1->fileInfo(proxy->matToSource(index)).absolutefilepatch;
 


Название: Re: использование QSortFilterProxyModel+QFileSystemModel
Отправлено: koldun90 от Декабрь 31, 2014, 10:02
Код:
void MainWindow::on_tableView_doubleClicked(const QModelIndex &index)
{


}
подскажите а если я использую qsortfilterproxymodel то в метод on_tableView_doubleClicked
index-- поступает модели Qsortfilterproxymodel Да?