Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Igors от Апрель 23, 2016, 14:53



Название: Список путей
Отправлено: Igors от Апрель 23, 2016, 14:53
Добрый день

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

Спасибо


Название: Re: Список путей
Отправлено: Racheengel от Май 09, 2016, 17:04
Эти все пути - содержимое одной папки или нет?
Просто непонятно, о чем речь и в чем проблема :(


Название: Re: Список путей
Отправлено: Igors от Май 10, 2016, 08:59
Эти все пути - содержимое одной папки или нет?
Нет. Пример выше: папка c именем "Standard" в списке только одна, ну и показываем в попапке просто "Standard". Возможно на машине есть где-то еще папка с тем же именем, но нас это не волнует. А вот папок с именем "Motions" в списке уже 2 и хз "кто есть кто". Поэтому нужно показывать уникальные имена используя часть полного пути
Просто непонятно, о чем речь и в чем проблема Грустный
А мне непонятно почему простейшие вещи Вам непонятны. Вы ж вроде специалист по "логике гуя"?  :)


Название: Re: Список путей
Отправлено: Racheengel от Май 10, 2016, 09:12
Цитировать
А мне непонятно почему простейшие вещи Вам непонятны. Вы ж вроде специалист по "логике гуя"?  :)

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

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

Motions
....Collection1
....Collection2


Название: Re: Список путей
Отправлено: Igors от Май 10, 2016, 09:34
Сколько человек отписалось в этой ветке? Как думаете, по какой причине?
Думаю потому что решение не так уж очевидно, и "тыц цитатой из букваря" не проходит :)

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


Название: Re: Список путей
Отправлено: Racheengel от Май 10, 2016, 11:25
Честно говоря, я в основном встречал более "тупое" решение (всякие ворды-студии-креаторы) - там каждый файл отображается с полным путем, а если путь не влазит, то он "элайдится" с помощью "...".

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


Название: Re: Список путей
Отправлено: Igors от Май 10, 2016, 14:05
Если же принципиально, ..
Не то чтобы уж "принципиально", но на основной платформе принято так делать.

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


Название: Re: Список путей
Отправлено: Racheengel от Май 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

как то так, вроде...