LINUX.ORG.RU

Файловый менеджер на C++/Qt

 , , ,


1

2

Всем общий привет!

Я начинающий разработчик на C++/Qt и хочу показать свой первый более-менее крупный проект – простой файловый менеджер под Linux.

Сейчас он умеет:

  • просматривать файлы и директории;
  • копировать их, вырезать и вставлять;
  • перетаскивать файлы (drag & drop);
  • работать с несколькими выделенными элементами и т. д.

Все операции выполняются через стандартные утилиты GNU/Linux – cp, mv, rm, ведь версия для Windows только в планах.

Интерфейс минималистичный, потому что стили только начинаю осваивать, но уже добавил плавные переходы между директориями и анимацию контекстного меню.

В планах:

  • «горячие» клавиши;
  • работа с примонтированными устройствами;
  • поддержка плагинов.

Проект открытый: ссылка на GitHub.

Буду рад, если найдёте какие-то баги или предложите идеи!



Проверено: dataman ()
Последнее исправление: dataman (всего исправлений: 8)

1) не очень важно, мой вкус избраные папки по центру не центровать, а выравнивать по краю?
2) обработать выхлоп mount и добавить подмонтированые fs к избраному?
3) обработать файл ~/.ssh/config записаные там хосты использовать для просмотра-монтирования по sshfs (раздел сетевые русурсы)?
4) много экземпляров проги или вкладки добавишь?
5) раз уж гуи то миниатюры img и видео? (не очень важно)
Мне qt нравится но почти весь мой софт на gtk (((

s-warus ★★★★
()
Ответ на: комментарий от DadyaIgor

Мой путь лёг навсегда на C/C++ и Python. Да, может у меня и будут второстепенные языки для чего-то, но C/C++ и Python мои главные языки

Ты не до конца прочитал)) Путь - это не про ЯП, а про UI твоего файлового менеджера.

Да, отчасти ты прав, но есть нюанс. В каталогах у меня понятие «Items», а в файлах как раз привычные гигабайты и мегабайты, т.к, чтобы измерить настоящий размер папки(а не 4 КБ, как это измеряется по дефолту), надо рекурсивно узнавать размер элементов внутри каталога.

Опасно это, измерять размер каталога при наведении. Ведь там может быть не 100 мегабайт, а 100 гигабайт, но прервать подсчет у тебя возможности нет, и наверняка он выполняется не в другом потоке

Кнопка назад и вперёд у меня в виде зелёной стрелочки, ведь нормальных иконок я пока не нарисовал. Вариант хороший, думаю даже в следующем обновлении добавлю.

Могу посоветовать тебе зайти в /usr/share/icons/тему_иконок/actions, и посмотреть какие там есть иконки. Множество из них стандартные, и лучше когда программа соответствует выбранной теме, а то может получиться так что пользователь поставил себе какую-нибудь highcontrast, а твоя тема отображает сине-желто-зеленые кнопочки

В Home у меня только скрытые файлы, не вижу смысла в корневой директории юзера хранить что-то, кроме директорий(и как раз нужных файлов в них) и скрытых файлов, которые часто системные.

Принимается

Да, тут ты прав, в файловом менеджере действитетльно это может показаться плохо, в следующих обновлениях буду переписывать хотя бы на утилиты Qt.

Не уверен что утилиты Qt могут рапортовать о процессе так, чтоб ты отлавливал этот рапорт и выводил пользователю. Мне кажется легче самому написать функцию рекурсивного скана файлов и побайтового чтения\записи, чем мудохаца с несколькими потоками, в одном из которых функция будет выполнять процесс, а во втором твой ГУЙ отлавливать статус и рисовать клиенту

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

Лучше бы конечно чтоб оно отлавливало какую-нибудь настройку, и активировалось относительно нее

В будущем планируется вынести в отдельное меню настроек, куда также перенесётся и настройка показа скрытых файлов.

Принимается

Ну как тебе сказать, для меня это что-то между пет проекта и тем, чем я в будущем буду пользоваться. Так что не почему бы не выложить сюда?

Ты снова меня не до конца прочитал :) Я пишу не о коде, я пишу о том, что для ФМов есть устоявшийся UI и лучше следовать ему.

windows10 ★★★★★
()
Ответ на: комментарий от rukez

превьюшки для картинок класть в локальную хранилку в папке

За такое надо бить по рукам.

чтоб не перечитывать их каждый раз

Так делают разве что наСИльники. Правильный алгоритм таков:

а) Пробегаемся по списку файлов, если это изображение, то
б) Считаем хеш файла, и ищем превьюху в ~/.cache/thumbnails/normal(или large)/хеш_файла.png, если она найдена то
в) Получаем пиктограмму файла из найденной картинки, иначе
г) Получаем пиктограмму файла из системной темы согласно его mimetype и запускаем процесс создания превьюхи по алгоритму из пункта б

Это избавляет от необходимости таскать за собой напревьюенные миниатюры, дает легкий доступ для очистки места, избавляет от дубликатов одного и того же изображения в разных путях, дает возможность использовать превьюху в других программах, например просмотрщиках изображений с функцией списка.

windows10 ★★★★★
()
Ответ на: комментарий от windows10

Могу посоветовать тебе зайти в /usr/share/icons/тему_иконок/actions, и посмотреть какие там есть иконки.

Не надо никуда ходить, в Qt есть QIcon::fromTheme

А это здесь к чему?

А это совет почитать документацию вместо пляски по граблям.

u-235
()
Ответ на: комментарий от u-235

А это совет почитать документацию вместо пляски по граблям.

Документацию к чему именно?

По твоей ссылке функция, возвращающая объект из текущей темы по строковому имени иконки.

windows10 ★★★★★
()
Ответ на: комментарий от windows10

функция, возвращающая объект из текущей темы по строковому имени иконки.

Именно, нужная иконка из системной темы без всяких поползновений по каталогам.

u-235
()
Ответ на: комментарий от u-235

Именно, нужная иконка из системной темы без всяких поползновений по каталогам.

И как же ты узнаешь имя нужной тебе иконки? ;)

windows10 ★★★★★
()

Про скриншоты ничего говорить не буду, т.к. работы только начались, а вот про сам проект я по диагонали посмотрел и теперь хочу сказать пару ласковых:

  • Чего все файлы в корне проекта валяются? Надо бы их по директориям раскидать красиво.

  • Если уж пишешь на крестах, то заголовочные файлы хорошо бы обзывать с расширением .hpp, т.к. они у тебя не С-совместимые всё равно.

  • Почему скомпилированный исполняемый файл приложения лежит в проекте рядом с кодом? :)

  • Я на культях не умею, но у тебя там в заголовочные файлы не слишком много include’ов включено? Желательно бы иметь необходимый минимум для зацепа типов.

  • В main.cpp одинаковый include джва раза.

  • В filelistview.h у тебя гард не охватывает всё содержимое файла.

В целом хочу пожелать удачи с проектом.

Bfgeshka ★★★★★
()
Последнее исправление: Bfgeshka (всего исправлений: 1)
Ответ на: комментарий от u-235

А это https://specifications.freedesktop.org/icon-naming/latest/ что?

А это чушь.

Если бы ты открыл каталог иконок и сравнил - ты бы это понял.

А если бы ты не ссылками кидался, а сам их читал, то увидел бы

Publication Date: August 9 2007, Version: Version 0.8.90

и понял бы, почему чушь.

windows10 ★★★★★
()
Последнее исправление: windows10 (всего исправлений: 1)
Ответ на: комментарий от Bfgeshka

в заголовочные файлы не слишком много include’ов включено? Желательно бы иметь необходимый минимум для зацепа типов.

В main.cpp одинаковый include джва раза.

Вот для этого IWYU хорош.

u-235
()
Ответ на: комментарий от windows10

А это чушь.

Вот здесь

Могу посоветовать тебе зайти в /usr/share/icons/тему_иконок/actions, и посмотреть какие там есть иконки. Множество из них стандартные

Ты про какой стандарт говорил?

u-235
()
Ответ на: комментарий от u-235

Ты про какой стандарт говорил?

Это не имеет значения, если нужна иконка, а не поумничать на лоре.

Когда заходишь в говнофридесктопную документацию, то видишь унылый текст, ни о чем не говорящий, особенно в контексте создания нового приложения.

Хотя бы потому что для твоей кнопки может не быть точного наименования, и ее придется искать среди других кнопок.

Хотя бы потому что за 18 лет многое изменилось.

Ну и зачем это дрочево с непонятным The icon used for an electronic mail that contains a signature which has also been verified by the security system., если можно просто зайти в каталог, просмотреть все иконки в режиме превьюхи, и выбрать нужную?

Не усложняй.

windows10 ★★★★★
()
Ответ на: комментарий от windows10

Ну и зачем это дрочево с непонятным The icon used for an electronic mail that contains a signature which has also been verified by the security system., если можно просто зайти в каталог, просмотреть все иконки в режиме превьюхи, и выбрать нужную?

Затем, чтобы с другой темой не случилось «Ой, а такой иконки нет, вот вам пустой квадратик».

u-235
()
Ответ на: комментарий от u-235

Затем, чтобы с другой темой не случилось «Ой, а такой иконки нет, вот вам пустой квадратик».

Как при использовании устаревшего дерьма из документации 2007 года?

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

Как ни крути, а визуальное восприятие проще, быстрее и надежнее.

windows10 ★★★★★
()
Ответ на: комментарий от nicholas_ru

лучше и моднее PCmanFM-qt ничего не видал.

Чем может быть лучше говно, каждый раз перерисовывающее миниатюры в папках, в которых уже был?)

windows10 ★★★★★
()
Ответ на: комментарий от Bfgeshka

Я на культях не умею, но у тебя там в заголовочные файлы не слишком много include’ов включено? Желательно бы иметь необходимый минимум для зацепа типов.

Тут можно в обе стороны накосячить.

Причём если ты накидаешь лишнего, это не так страшно, стражи компиляции должны это отсечь. Хотя некрасиво, да.

А вот если не добавить нужного – последствия могут быть непредсказуемы, например, на одной версии Qt проект соберётся, а на другой вывалится с ошибкой. Ибо это C++, у которого вместо модульности связка костылей на препроцессоре родом из 70-х. Да, в C++20 появилась возможность от этого уходить, но я не знаю, поддерживается ли это в Qt, да и не везде этот самый C++20 собрать можно. Пытаясь сделать «минимум», можно подставить того, кто это потом будет поддерживать. Лучше включать ровно то, что требуется, не больше и не меньше.

hobbit ★★★★★
()

Не суетись по поводу киллер-фич, прогресс-баров, «правильных способов» и прочего. Ты можешь потратить годы ковыряясь в деталях и не догонишь по практичности существующие фм все равно.

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

А так выглядит прикольно, я в свое время тоже изучал программирование gui на qt4.

loz ★★★★★
()
Последнее исправление: loz (всего исправлений: 2)
Ответ на: комментарий от nicholas_ru

лучше и моднее PCmanFM-qt ничего не видал.

В среднем все они одинаковые: Thunar, Caja, Nemo. По скриншотам вроде такой же, но попробовал PCmanFM и он подерживает значки 16х16, к которым я привык. Nemo тоже поддерживает, но при масштабировании регулирует шрифты, при 16х16 они слишком мелкие, а PCmanFM оставил как есть.

AZJIO
()
Ответ на: комментарий от jura12

я планирую с mc перейти на far2l.

А можно рассказать про киллер-фичу для far2l? Пользуюсь mc/far давно, про этот порт слышал - может я что-то интересное пропустил ;)

PS: с сайта far2l - Useful 3rd-party extras: Turbo Vision - разве что вспомнить молодость, но не более ;)

azazello ★★★★
()
Ответ на: комментарий от azazello

А можно рассказать про киллер-фичу для far2l?

вопрос не ко мне. я только начал его использовать. основная фитча это работа с буфером обмена в командной строке. но ввиду зоопарка терминалов, ДЕ и наличия вайланда не всегда работает одинаково. кроме того есть раскраска в редакторе формата файлов маркдауна и возможность написания плугинов. я успешно поставил с репозитория и для теста скомпилировал из исходников. думал как себя реализовать в компьютерной отрасли. решил написать плугин массового переименования к far2l. за основу возьму krename. о результате станет известно примерно через месяц. надо вспомнить c++ и ознакомиться с far api.

jura12 ★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.