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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Список путей  (Прочитано 4166 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Апрель 23, 2016, 14:53 »

Добрый день

Есть QList<QDir> (список путей). Нужно отобразить его в попапке с учетом уникальности имен, напр
Цитировать
Standard    
Collection1/Motions
Collection2/Motions
Т.е. 2 фолдера с одним именем Motions, значит показываем бОльший хвостик пути. Как это сделать удобно/элегантно?

Спасибо
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Май 09, 2016, 17:04 »

Эти все пути - содержимое одной папки или нет?
Просто непонятно, о чем речь и в чем проблема Грустный
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Май 10, 2016, 08:59 »

Эти все пути - содержимое одной папки или нет?
Нет. Пример выше: папка c именем "Standard" в списке только одна, ну и показываем в попапке просто "Standard". Возможно на машине есть где-то еще папка с тем же именем, но нас это не волнует. А вот папок с именем "Motions" в списке уже 2 и хз "кто есть кто". Поэтому нужно показывать уникальные имена используя часть полного пути
Просто непонятно, о чем речь и в чем проблема Грустный
А мне непонятно почему простейшие вещи Вам непонятны. Вы ж вроде специалист по "логике гуя"?  Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #3 : Май 10, 2016, 09:12 »

Цитировать
А мне непонятно почему простейшие вещи Вам непонятны. Вы ж вроде специалист по "логике гуя"?  Улыбающийся

Потому что задавая вопрос, неплохо бы объяснять его суть (как в последнем комменте). Сколько человек отписалось в этой ветке? Как думаете, по какой причине?

По теме: в принципе, можно оставить, как есть (в Вашем списке). Плюс при наведении мыши показывать полный путь в попапе.
Или, как вариант, отображать в виде дерева, гле имя папки будет корнем, а ее родительские папки - листиками. Примерно так:

Motions
....Collection1
....Collection2
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Май 10, 2016, 09:34 »

Сколько человек отписалось в этой ветке? Как думаете, по какой причине?
Думаю потому что решение не так уж очевидно, и "тыц цитатой из букваря" не проходит Улыбающийся

По теме: в принципе, можно оставить, как есть (в Вашем списке).
Так у меня ничего и нет, это "как хотелось бы". Я спрашиваю как вычислить "минимальное но уникальное имя" по имеющемуся контейнеру QDir. Вы же это 100 раз видели в меню приложений "Open Recent", разные файлы с одинаковыми именами идентифицируются. Здесь просто фолдеры вместо файлов.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Май 10, 2016, 11:25 »

Честно говоря, я в основном встречал более "тупое" решение (всякие ворды-студии-креаторы) - там каждый файл отображается с полным путем, а если путь не влазит, то он "элайдится" с помощью "...".

Если же принципиально, чтобы показывалась уникальная части пути "с конца", то так - создать мультимап вида "ключ-путь", где "ключом" являлась бы "уникальная с конца" часть пути. Потом для каждого пути выделяем кусок от последнего слэша до конца и пакуем в мап. Далее смотрим, если в мапе есть одинаковые ключи, то заменяем их все на пути, которые начинаются со слэша "раньше", и повторяем так, пока мапа не станет уникальной.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Май 10, 2016, 14:05 »

Если же принципиально, ..
Не то чтобы уж "принципиально", но на основной платформе принято так делать.

..чтобы показывалась уникальная части пути "с конца", то так - создать мультимап вида "ключ-путь", где "ключом" являлась бы "уникальная с конца" часть пути. Потом для каждого пути выделяем кусок от последнего слэша до конца и пакуем в мап. Далее смотрим, если в мапе есть одинаковые ключи, то заменяем их все на пути, которые начинаются со слэша "раньше", и повторяем так, пока мапа не станет уникальной.
Как часто говорят
Цитировать
А можно пример?
Улыбающийся Да, идея понятна, но реализация как-то не выглядит простой. "Костыль"?  Улыбающийся
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #7 : Май 11, 2016, 18:21 »

Ну, костыль или не костыль, пока другого не пришло в голову Улыбающийся
Идея то простая, вроде как.

1. Берем в качестве ключа сначала только правые части путей до \.
например, если пути такие:

SomeDir\Models
Dir2\Models1\Stuff
Dir2\Models2\Stuff
Dir3\Models
Dir3\SomeData

то сначала сформируется мультимап типа:

[Models, SomeDir\Models]
[Stuff, Dir2\Models1\Stuff]
[Stuff, Dir2\Models2\Stuff]
[Models, Dir3\Models]
[SomeData, Dir3\SomeData]

2 Выделяем повторяющиеся ключи, получаем 2 сета:

[Models, SomeDir\Models]
[Models, Dir3\Models]

[Stuff, Dir2\Models1\Stuff]
[Stuff, Dir2\Models2\Stuff]

3. В каждом сете заменяем ключи на значения справа до следующего слеша:

[SomeDir\Models, SomeDir\Models]
[Dir3\Models, Dir3\Models]
[Models1\Stuff, Dir2\Models1\Stuff]
[Models2\Stuff, Dir2\Models2\Stuff]

4. Повторяем п.2, пока не останутся одни уникальные ключи. Выводим их:

SomeDir\Models
Dir3\Models
Models1\Stuff
Models2\Stuff
SomeData

как то так, вроде...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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