Russian Qt Forum
Ноябрь 24, 2024, 06:59 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: использование QSortFilterProxyModel+QFileSystemModel  (Прочитано 7151 раз)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« : Декабрь 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?

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Декабрь 29, 2014, 12:28 »

Если используешь прокси, нужно корретировать индексы. Смотри mapToSource и mapFromSource.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #2 : Декабрь 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
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #3 : Декабрь 29, 2014, 13:32 »

что можно сделать
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Декабрь 29, 2014, 13:37 »

Код
C++ (Qt)
ui->tableview->setRootIndex(sortmodel->mapToSource(index))    
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #5 : Декабрь 29, 2014, 13:43 »

а если пишу как выше вы сказали
index must be from the currently set model
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #6 : Декабрь 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));
}
« Последнее редактирование: Декабрь 29, 2014, 13:47 от koldun90 » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Декабрь 29, 2014, 14:05 »

Не, смотри, в слоте on_tableView_doubleClicked нужно напрямую юзать index, не надо его маппить. А вот если данные какие-то хочешь из модели извлечь по индексу, тогда мапь его.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #8 : Декабрь 29, 2014, 14:28 »

Код:
ui->tableView->setRootIndex(index);
так работает)
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #9 : Декабрь 29, 2014, 17:15 »

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

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Декабрь 30, 2014, 08:08 »

Обычно такое происходит если нет прав на просмотр данного каталога... С помощью QDir можно посмотреть в нем файлы?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #11 : Декабрь 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

что можно еще сделать....
« Последнее редактирование: Декабрь 30, 2014, 10:45 от koldun90 » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Декабрь 30, 2014, 11:29 »

Ну, блин, я же писал
Код
C++ (Qt)
const QString hh= model1->fileInfo(proxy->matToSource(index)).absolutefilepatch;
 
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #13 : Декабрь 31, 2014, 10:02 »

Код:
void MainWindow::on_tableView_doubleClicked(const QModelIndex &index)
{


}
подскажите а если я использую qsortfilterproxymodel то в метод on_tableView_doubleClicked
index-- поступает модели Qsortfilterproxymodel Да?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 23.