Название: Список путей Отправлено: Igors от Апрель 23, 2016, 14:53 Добрый день
Есть QList<QDir> (список путей). Нужно отобразить его в попапке с учетом уникальности имен, напр Цитировать Standard Т.е. 2 фолдера с одним именем Motions, значит показываем бОльший хвостик пути. Как это сделать удобно/элегантно?Collection1/Motions Collection2/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 как то так, вроде... |