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

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: qfilesystemmodel  (Прочитано 13798 раз)
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #15 : Август 04, 2014, 10:46 »

вы имеете ввиду
Код:
qobject_cast<QFileSystemModel*> (sourceModel ())->fileinfo(source_parent); 
??



Скорее так правильнее будет:
Код:
(qobject_cast<QFileSystemModel*> (sourceModel ()))->fileinfo(source_parent); 
А лучше так:
Код:
QFileSystemModel * fileSystemModel = qobject_cast<QFileSystemModel*> (sourceModel());
if (fileSystemModel) {
   const QFileInfo & info = fileSystemModel->fileinfo(source_parent);
   qDebug() << info.absolutePath();
}

 Улыбающийся
« Последнее редактирование: Август 04, 2014, 11:36 от gil9red » Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #16 : Август 04, 2014, 11:09 »

Код:

    QFileSystemModel *t=qobject_cast<QFileSystemModel*> (sourceModel());
    QString str=t->fileInfo(source_parent).absoluteFilePath();


еще я заметил такую штуку
если распечатывать значение str

Код:
   QMessageBox msg;
   msg.setText(str);
   msg.exec
то постоянно выводит "/"
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #17 : Август 04, 2014, 11:20 »

Так source_parent же один, ты source_row юзай.
Записан

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

Сообщений: 345


Просмотр профиля
« Ответ #18 : Август 04, 2014, 11:33 »

даже если делаю так
Код:
    QFileSystemModel *t=qobject_cast<QFileSystemModel*> (sourceModel());
    QString str=t->fileInfo(source_parent).absoluteFilePath();

    QFileSystemModel *fileSystemModel = qobject_cast<QFileSystemModel*> (sourceModel());
    if (fileSystemModel)
    {
        const QFileInfo & info=fileSystemModel->fileInfo(source_parent);
       QString str= info.absoluteFilePath();
       QMessageBox msg;
       msg.setText(str);
       msg.exec();
       return true;
    }


то все равно всегда str= "/"
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #19 : Август 04, 2014, 11:37 »

даже если делаю так
Код:
    ...
    if (fileSystemModel)
    {
        const QFileInfo & info=fileSystemModel->fileInfo(source_parent);
    ...


то все равно всегда str= "/"

Так source_parent же один, ты source_row юзай.
Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #20 : Август 04, 2014, 12:49 »

source_row-- я так понимаю это номер строки чтоль?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #21 : Август 04, 2014, 13:04 »

source_row-- я так понимаю это номер строки чтоль?

и все собственно мне поможет это сделать QSortFilterProxyModel?
Да. Отнаследуйся от нее и реализуй
Код
C++ (Qt)
bool QSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex & source_parent) const [virtual protected]
 

Ну я думаю, что про это имело ввиду Улыбающийся
Записан

koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #22 : Август 04, 2014, 13:08 »

да имел ввиду это
source_row -- я так понимаю это номер строки?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #23 : Август 04, 2014, 13:09 »

да имел ввиду это
source_row -- я так понимаю это номер строки?
Да, считая от парента.
Записан

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

Сообщений: 345


Просмотр профиля
« Ответ #24 : Август 04, 2014, 13:25 »

тогда не совсем понятно допустим начинает выполняться моя программа корневой каталог "/"
при каждом входе в данный метод происходит так

Source_parent="/" постоянно
а source_row меняется от 0 и далее....
так вот как мне определить получается какую строку от парента надо добавить ( в данном случае мне нужно /root и  /mnt/cdrom допустим??
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #25 : Август 04, 2014, 13:30 »

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

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

Сообщений: 345


Просмотр профиля
« Ответ #26 : Август 04, 2014, 13:39 »

если считать что source row -- номер строки от парента
я запустил прогу посчитал что строка "mnt" у меня имеет номер 32
а строка "root" имеет номер 42

сделал такое условие
Код:
if ((str=="/" && source_row==32) || (str=="/" && source_row==42)
{
    return true;
}
else
{
    return false;
}
судя по этому он должен вывести в представлении тогда два каталога 32-- это mnt 42--это root
но при выполнении программы модель пустая
Записан
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #27 : Август 04, 2014, 13:43 »

извините а не могли бы ссылочку на примеры если не сложно
просто что то совсем непонятно....
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #28 : Август 04, 2014, 13:47 »

Ты можешь у sourceModel запросить нужный индекс:
sourceModel ()->index (source_row, 0, parent_index)

Примеры поставляются с Кьютом в каталоге examples.
Записан

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

Сообщений: 345


Просмотр профиля
« Ответ #29 : Август 04, 2014, 14:58 »

в примере вот так вот написано
Код:
bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow,
        const QModelIndex &sourceParent) const
{
    QModelIndex index0 = sourceModel()->index(sourceRow, 0, sourceParent);
    QModelIndex index1 = sourceModel()->index(sourceRow, 1, sourceParent);
    QModelIndex index2 = sourceModel()->index(sourceRow, 2, sourceParent);

    return (sourceModel()->data(index0).toString().contains(filterRegExp())
            || sourceModel()->data(index1).toString().contains(filterRegExp()))
           && dateInRange(sourceModel()->data(index2).toDate());
}

мне вес равно не понятно

у меня так
Код:
bool MySortFilterProxyModel::filterAcceptsRow(int sourceRow,const QModelIndex &sourceParent)
{   
    QMessageBox msg;
    QModelIndex resource=sourceModel()->index(source_row,0,source_parent); // проходимся по всем строкам и суем их в Modelindex
    QFileSystemModel *fileSystemModel = qobject_cast<QFileSystemModel*> (sourceModel());
    if (fileSystemModel)
    {
       const QFileInfo & info2=fileSystemModel->fileInfo(resource);
       QString str=info2.absoluteFilePath();  //берем абсолютный путь reosurce
       if (str.contains("/root")) // если путь содержит папку
       {
           return sourceModel()->data(resource).toString().contains("/root"); //как в примере
           
       }
       else
       {
           return false;
       }
    }
}

Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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