LINUX.ORG.RU

QT, C++, fm


0

0

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

Я имею некоторые навыки программирования на С++ под линукс. С QT тоже работал. Не на том уровне, на котором хотелось бы.

Посоветуете русские доки по следующим темам:
- работа с файлами/директориями (вроде у QT средства есть хорошие)
- Обмен сообщениями между приложениями (имеются ввиду несколько экземпляров приложений. Так же интересно как создать область памяти, к которой имеют доступ несколько приложений)

Про QDirectories (кажется) и прочие классы я читал в doc-qt, но списка методов и полей мало.

Посоветуйте что нибудь с РЕАЛЬНЫМИ примерами.
Заранее благодарю.


Ну, во первых интерфейс. Можно сделать простенький QVBox, либо QMainWindow с тулбаром, статусбаром и директориями внутри - это как тебе удобней :)

Далее лиситнг каталогов. Скажу сразу, что FAM QT не поддерживает, значит следить в реальном времени за каталогами не получится (в отличие от KIconView). Для листинга калогов можно использовать QDir, все найденные файлы запихивать в QIconView или QListView. В QIconView с помощью сигналов pressed, clicked, etc. отслеживай клики по файлам.

Вот вроде и всё :)

P.S. полистай пример из дистриба qt/examples/fileiconview

Krasu
()

>> Обмен сообщениями между приложениями

Эмм... можно с помощью сокета, как XMMS. Но полноценного обмена а-ля DCOP наврятли ...

Можно ещё попробовать через D-BUS :)

Krasu
()
Ответ на: комментарий от anonymous

У пользователя должен быть выбор, просматривать файлы как список или таблицу.
Поэтому при работе с прогой ?придется использовать указатель на void?. Но ведь при работе везде нужно будет использовать следующий прием:
switch (config->modeview){
case «QListView»:
{
(QListView)config->list;
...
}
case «QIconView»:
{
(QIconView)config->list;
...
}
}
Понимаю что я бред написал. Не в курсе у какого нибудь виджета(QListBox, QIconView, QlistView etc) есть возможность выбирать способ представления?
Я хотел бы узнать что вы думаете о «алгоритме»:

Сначала в контейнер забиваем объекты TburzumFile(класс описан мною, имя конечно другое), имеется указатель на Q...Item.
Пользователь кликает или еще что на Q...Item, ищем по имени в контейнере объект, производим необходимые действия.

Какой контейнер использовать? Я работал только с вектором, приимуществ других не знаю...

burzum
() автор топика
Ответ на: комментарий от burzum

Можно сделать наследника QWidgetStack, скажем BurzumWidgetStack. добавляешь в него первым ваджетом BurzumIconView, вторым - BurzumListView. На тулбар выносишь ссответсвенно две иконки - одна будет при нажатии выводить BurzumIconView (QWidget::raiseWidget(..)), вторая - BurzumListView.

В _каждом_ View очевидно надо ловить сигналы clicked, pressed, etc. - составлять полный путь для выбранного файла, и делать с ним что-нибудь (копировать, удалять, etc.)

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

Что есть QWidgetStack? Что значит добавить ПЕРВЫМ BurzumIconView, ВТОРЫМ BurzumListView? Массив какой то получается.

Чем хуже будет так?

struct TLists{
QListView list;
QIconView icon;
};

Т.Е. в памяти придется держать два или больше *view'ов.
Не будет ли это проблематично при больших списках файлов?
Можно их параллельно обрабатывать, или при переключении модов.

PS Спасибо что серьезно отнесся к моей затеи.

burzum
() автор топика
Ответ на: комментарий от burzum

>>Что есть QWidgetStack?

Assistant запусти :))

[The QWidgetStack class provides a stack of widgets of which only the top widget is user-visible.

The application programmer can move any widget to the top of the stack at any time using raiseWidget(), and add or remove widgets using addWidget() and removeWidget(). It is not sufficient to pass the widget stack as parent to a widget which should be inserted into the widgetstack.]

>>struct TLists{
>>QListView list;
>>QIconView icon;
>>};

Это как ? Не понял :) QIconView и QListView - это _ваджеты_, а не просто списки файлов. Вообзем, читай assistant.

Проблемы ? Да могут быть, но маловероятно. Даже ~5000 QIconViewItem кушают не так уж и много памяти :)

Тэкс ... "Красный дракон" начинается :))

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

Я имел в виду это:

struct TLists{
QListView *list;
QIconView *icon;
};

В общем, не обращай внимания. Постораюсь больше не задавать глупых вопросов.

Спасибо.

burzum
() автор топика
Ответ на: комментарий от burzum

>>struct TLists{
>>QListView *list;
>>QIconView *icon;

Да какая разница :)), просто эти два указателя хранить будешь в BurzumWidgetStack, структкры тут не надо. Вообще, если что - обращайся, мне такой проект будет интересен ;) Чем смогу помогу.

Krasu
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.