Russian Qt Forum

Qt => Общие вопросы => Тема начата: Namelles One от Январь 19, 2006, 19:18



Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 19, 2006, 19:18
Начал писать одну программу, продумываю концепцию, но мне непонятна пара моментов...
1.Смысл программы - имеется список имен, при клике по имени - на label кладется картинка соответствующая этому имени, в текстовое окно кладется описание, соответствующее имени и т.д.

2. Непонятно -

а)Как хранить этот список - просто текстовый файл или xml ?

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

Вот теперь основной вопрос к профессионалам - концепция верна, или сделано через одно место?


Название: Файлы, списки и прочее...
Отправлено: Steven_Orko от Январь 19, 2006, 19:46
А поподробнее? что за программа?  Основная цель ее создания?

Цитировать
Вот теперь основной вопрос к профессионалам - концепция верна, или сделано через одно место?

Вполне возможно, что нормальная, если данных мало.

Что такое "имя"? Название чего-то? Картинка - это фото того, что определено в названии??? Ну, а в текстовое окно кладется тогда более подробная информация? Если так, то хранить можешь, где угодно. Хоть в бинарном файле, хоть в БД. Только вот как картинку ты хранить в XML будешь??? Можно только путь к ней указать(ИМХО).

Судя по всему, твоя прога что-то наподобии справочника. Посмотри, как организованы подобные справочники. Если инфы много, и планируется ее добавление, редактирование, удаление, а твоей программой только просмотр, то (ИМХО) для хранения данных лучше использовать БД. Потом и расширить сможешь...


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 19, 2006, 21:10
Бд-бд...
То есть стационарная ODBC?

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


Цитировать

вот как картинку ты хранить в XML будешь??? Можно только путь к ней указать(ИМХО).


А я так и хотел сделать...

А обновление я собирался написать так - все новинки публикуются у нас на сайте, и к MySQL хостинга есть доступ извне, вот я и хотел написать модуль коннекта к ней, для проверки обновлений.

Ну-с, будут еще версии?


Название: Файлы, списки и прочее...
Отправлено: Steven_Orko от Январь 19, 2006, 21:26
Цитировать

Бд-бд...
То есть стационарная ODBC?

Интересно, что ты понимаешь под словосочетанием "стационарная ODBC"??? Это вообще как???? :?:


Название: Файлы, списки и прочее...
Отправлено: D_N_S от Январь 19, 2006, 21:44
Наверное, "стационарная ODBC"=стационарная СУБД???

Можно и через нее (СУБД)... вопрос - кому и как это приложение будет распространяться... будет ли у пользователя желание поднимать эту базу?

Вопрос другой - а не проще ли юзеру с сайта всё посмотреть? Или целесообразность разработки такой вытекает скорей из желания поиметь новые скиллы программинга, нежели создать меганужное ПО???

"и к MySQL хостинга есть доступ извне, вот я и хотел написать модуль коннекта к ней, для проверки обновлений. " = грузиться всё будет с сайта и смотреться потом на стационарном компе? такая задача?  Когда определимся с этим - дальше - больше.

P.S. Пардон за сленг и  словоохотливость - день такой выдалася :)


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 19, 2006, 21:54
Цитировать

Наверное, "стационарная ODBC"=стационарная СУБД???


Э ну да-да, конечно, совсем уже зарапортовался...
Вся эта энциклопедия и так уже доступна на сайте...
Но мало-ли вдруг, понадобиться описаниЕ, а доступа к инету нет, вот и пришло предложение написать оффлайн версию...

Цитировать

будет ли у пользователя желание поднимать эту базу?


Именно поэтому и не хотел бы связываться с этим...

Цитировать

грузиться всё будет с сайта и смотреться потом на стационарном компе?


Нет энциклопедия будет полностью локалная...
Через БД сайта будет сделан только модуль обновления...
Но это потом, пока надо оффлайн-часть написать...


Название: Файлы, списки и прочее...
Отправлено: Вудруф от Январь 20, 2006, 09:24
Структуру SQL можно повторить и в локальном приложении.
Хранение в файлах:
Элементы (elem.dat):
pk, name_len, name
...
Описание (desc.dat):
pk, fk_elem, desc_len, desc
...
Картинки (pict.dat)
pk, fk_elem, path_len, path
...


path - путь на внешнюю картинку. Текст занимает немного места, его можно за один проход полностью подгрузить в программу, а вот картинки лучше хранить отдельно...
Можно и в одном файле с разделителями. Скажем, pk может принимать значение от 0x0000 до 0xFFFE а разделитель 0xFFFF.
Я так делал для тестирующей программы, которую в своё время писал.

Можно, конечно, хранить и в xml, но так все данные хранятся в бинарном виде...


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 20, 2006, 12:56
Хм...
То есть получается, что при открытии программы делается проход по файлам, и вся инфа грузится в оперативку по массивам, а потом уже юзается?


Название: Файлы, списки и прочее...
Отправлено: Steven_Orko от Январь 20, 2006, 16:58
to Namelles One:
Если тебе так уж очень хочется, то можешь написать свой движок, для работы с данными, хранимыми в файле, только  все равно любую СУБД по оперативности и эффективности доступа ты не переплюнешь.  P.S. Ты сам-то сколько думал над своей задачей???


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 20, 2006, 18:50
Цитировать

все равно любую СУБД по оперативности и эффективности доступа ты не переплюнешь.


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

Цитировать

P.S. Ты сам-то сколько думал над своей задачей???

Я думаю над ней уже довольно давно, притом продолжаю думать и сейчас, читая ваши ответы... И ерничание, ИМХО, здесь неуместно.


Название: Файлы, списки и прочее...
Отправлено: D_N_S от Январь 20, 2006, 20:26
Возможно, я повторю отчасти Вудруф, но все же.

Мои предложения по планируемой разработке...

Храним в файле построчно (имя его, например, conf/main.dat):
<id элемента1>, <имя_картинки1>, <ее описание1>,<имя файла с картинкой1>
<id элемента2>, <имя_картинки2>, <ее описание2>,<имя файла с картинкой2>
.....

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

В отдельном файле (например, ini/update.inf) желательно хранить дату(отсчитываемую во временнОм пространстве сервера) последней загрузки. Каждый раз ее апрейдтить после загрузки.

Картинки хранить в папке img. Имена файлов картинок дополняются "img" слева.

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

Подымать ради такой задачи локальную СУБД смысла не вижу: не каждый юзер станет это делать, а если и станет - не каждый доживет до корректной установки. Возможностей СУБД здесь особо и не надо (надеюсь сложного иерархического разбиения с упорядочиванием на кланы героев приложением не будет производиться?--- просто показ плоского списка).

То, как это всё фентезийное хозяйство отображать - на свой вкус. Можно древовидно, можно просто комбо, можно таблицу... смотря сколько их... дело чувства юзабилити.

Апдейт - это коннект к удаленной майскуюль базе с запросом типа:
select id, label, desc, fpath where dateIns>[время последнего апдейта из файла ini/update.inf].
Так мы получим список новых картинок с их описаниями и прочим.
И качаем далее из папки удаленного сервака файлы имена которых мы только что выбрали. Только после того, как мы все закачали - апдейтить реальные файлы данных (список инфы, дату). И теперь апдейтим онлайн данные для отображения.... Можно, конечно, еще подумать насчет дозакачки как файлов, так и их частей, но это уже предлагаю потом. Пока и этого хватит. Какими средствами расти дальнейшему функционалу уже заложено (АйДи картинки).

ИМХО


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 20, 2006, 21:45
Хм...
ну что же, ИМХО, последний пост наиболее юзабельный...

D_N_S
Пасибо, помог мне мои мысли в порядок привести и дополнить их...

Если еще какие-либо вопросы возникуть - задам...
Всем спасибо... ;)


Название: Файлы, списки и прочее...
Отправлено: Sergey B. от Январь 21, 2006, 07:02
А ещё можнo глянуть в сторону sqlite. Вроде как база
(+) работа через SQL
(+) существует везде (Win,Lin)
(+) ничего не надо мудрить с ODBC
(+) картинки можно хранить прям в ней... :D


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 21, 2006, 13:10
Sergey B.

Я вчера как раз читал экзамплы Qt про эту БД...
И мне остался непонятен один момент...
Получается, что данные вносятся в базу при каждом за пуске программы, а для этого все равно надо тащить с собой текстовые файлы и каждый раз их читать...
В чем же тогда преимущество?


Название: Файлы, списки и прочее...
Отправлено: Sergey B. от Январь 21, 2006, 13:23
Цитата: "Namelles One"
Sergey B.

Я вчера как раз читал экзамплы Qt про эту БД...
И мне остался непонятен один момент...
Получается, что данные вносятся в базу при каждом за пуске программы, а для этого все равно надо тащить с собой текстовые файлы и каждый раз их читать...
В чем же тогда преимущество?


Нет, Qt устоена так, что ты запуская прогу пишешь в запросе, после коннекта структуру базы через SQL. Далее работаешь, пишешь в неё данные.... Закрываешь прогу. Запускаешь прогу снова .... оп вуаля...
драйвер устроен так, что если файл уже существует она его не перетирает, а просто коннектиться и всё...
Да, ещё момент, если ты поменяешь структуру базы, тебе надо будет, чтоб она поменялась прибить старый файл...
 :D
Сам был приятно удивлён... Тож парился чегож сделать чтоб файл остался, но как оказалось Тролли подумали за нас...


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 21, 2006, 19:03
Эээ...
Что-то я выпал из нити повествования...
То есть в программе я жестко прописываю, что в БД должно ложиться, при компиляции это все зашивается в программу...
И при каждом запуске прога работает с БД...

А как же тогда с обновлениями?
Нутром чую, что идея хорошая, но догнать не могу...


Название: Файлы, списки и прочее...
Отправлено: Sergey B. от Январь 21, 2006, 19:59
Цитата: "Namelles One"
Эээ...
Что-то я выпал из нити повествования...
То есть в программе я жестко прописываю, что в БД должно ложиться, при компиляции это все зашивается в программу...
И при каждом запуске прога работает с БД...

А как же тогда с обновлениями?
Нутром чую, что идея хорошая, но догнать не могу...


Да нет же...
Когда ты пишешь прогу ты прям в коннекте пишешь  
Create table some_1(key,name_1,name_2) ...
Create table some_2(key,name_1,name_2) ...
Работаешь, пишешь в них, причём работаешь как с SQL серевером... для проги никакой разницы нет:
QSqlQuery qr;
qr.exec(INSERT INTO some_1(key,name_1,name_2) VALUES(1,"easy", "boy"));


Когда закрываешь прогу все данные у тебя в твоём файле базы.
И вот когда ты перезапускаешь прогу, функция коннекта не пересоздаёт таблицы в файле, если он уже существует на диске, т.е.
строки
Create table some_1(key,name_1,name_2) ...
Create table some_2(key,name_1,name_2) ...

просто пропускаються...
типа того, если по простому... :D

P.S.
Да и ещё когда будешь к MySQL коннектиться (откуда обновления брать будешь), прикинь ты в двух базах средствами самого SQL находишь разницу записей, и не достающие в цикле вставляешь в свою локальную sqlite... От тебя минимум усилий...


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 21, 2006, 21:01
Ну в общем я примерно понял... ;)
Теперь надо тестить и втыкать - без вариантов... ;)
Спасибо.


Название: Файлы, списки и прочее...
Отправлено: nEoN от Январь 23, 2006, 18:28
Цитата: "Namelles One"
А программа, действительно, это энциклопедия...
У нас в интернете существует сообщество любителей фэнтези, мы собрали довольно большую подборкуфантастичиских существ с картинками и описанием, а теперь меня попросили написать программу, чтобы эту подборку можно было бы распостранять...

Недавно мне встретился OpenSorce проект Tellico, по моему как раз то, что ты хочешь реализовать.

Цитировать
Tellico is a KDE application for organizing your collections. It provides default templates for books, bibliographies, videos, music, video games, coins, stamps, trading cards, comic books, and wines.

Он правда под KDE, но может быть и в чистом Qt собирается.
Как минимум можно посмотреть как оно устроено.
Данные хранит в XML.

Главная страница: http://www.periapsis.org/tellico/
Скриншоты: http://www.periapsis.org/tellico/sshots.php


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 23, 2006, 21:35
Спасибо, заценим...
А насчет данных - я седня с БД разбирался, великолепно все работает...
ИМХО, так действительно удобнее будет...


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 30, 2006, 20:57
Хм...
Сделал бета сборку программы, собрал в инсталлятор вроде бы все dll, к которым прога тянулась (посмотрел через PeID) и переслал другу...

А у него - не запускается БД, говорит - нету её...
Но как же так, я же dll для SqLite положил... :(
А, в чем баг-то ?


Название: Файлы, списки и прочее...
Отправлено: Sergey B. от Январь 30, 2006, 22:07
Цитата: "Namelles One"
Хм...
Сделал бета сборку программы, собрал в инсталлятор вроде бы все dll, к которым прога тянулась (посмотрел через PeID) и переслал другу...

А у него - не запускается БД, говорит - нету её...
Но как же так, я же dll для SqLite положил... :(
А, в чем баг-то ?


как клал?
В папке с экзешником должна быть папка sqldrivers\( а в ней должна лежать Qsqlite.dll) и не забыл Qtsql.dll?


Название: Файлы, списки и прочее...
Отправлено: Namelles One от Январь 31, 2006, 17:07
Блин...
Все вложил верно, но Qsqlite.dll кладется не в sqldrivers\ , а корень папки с программой...
Может ли это быть причиной?