Russian Qt Forum

Разное => Говорилка => Тема начата: the_moop от Май 12, 2011, 13:33



Название: Пишу диплом!!!
Отправлено: the_moop от Май 12, 2011, 13:33
Здравствуйте товарищи проггеры; 
Может быть (читай: стопудово) пишу не туда вообще, но писать больше некуда, поэтому уж извините...

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

Начинал писать диплом; Сам я инженер и к программированию имею не прямое отношение, но решил взять тему не по профилю и руководитель мой согласился и дал...
даже такую, чтобы  я сильно не заморачивался : написать программу
создание фотоархива + собственно просмотрщик фоток оттуда;
Знания в области программирования у меня имелись\имеются... да и опыт тоже
хоть и небольшой, но был;... , поэтому даже не думал что с этим дипломом возникнут
проблемы. Почти сразу решил что писать на Qt C++;
Затарился литературой как печатной так и электронной; Естественно оставил самое нужное:
(списочек довольно попсовый наверное, но ... )
Жасмин Бланшет, Макс Шлее и еще парочка авторов; Прочитал по нескольку раз
с анализом и разбором каждого примера и вытекающими... в общем был уверен в себе

Наконец решил писать диплом; Оставил себе месяц\полтора месяца на написание...
И вот начинаю писать... и понимаю что... В общем нихрена не понимаю;
Не знаю с чего начать, как начать, куда начать; В голове куча всего но пристроить
не могу все эти теоритические знания; В общем тихий ужас;

Знаю что еще один быстрый прогон по каждой книге мне не удасться; Но и искать нужную инфу по строчкам точно не смогу; Осталось у меня времени наверное где-то до 10 числа  июня (по оптимистичным прогнозам, + надо писать теорию а там куча всего.
В общем к 5 июню ...

Вот теперь собственно и:

Люди добрые, мы сами не местные) помогите чем можете;
А если серъезно - тему я наверху обрисовал : приложение автоматического создания фотоархива и бла бла бла... короче обычный просмотрщик  типа faststoneviewer, picasa, xn, gn и т.д

Я даже не знаю какие советы мне нужны : с какими классами лучше работать, стоит ли работать только со "своими" библиотеками (qt creator) или подключать какие-то от постороннего разработчика - например библиотеки для работы с изображениями; какие виджеты лучше использовать, на какие классы стоит обратить внимание; и т.д

Я уже сказал что даже не знаю какие советы мне нужны, поэтому люди:

Если есть информация, которая по вашему мнению мне может помочь в написании..
отписывайтесь;

P.S не судите строго за наглость и сумбурность; уже отчаялся; заранее всех благодарю;




Название: Re: Пишу диплом!!!
Отправлено: Пантер от Май 12, 2011, 13:38
Сам уже не напишешь. Можешь кому-нибудь денег заплатить, чтобы написали, но времени уже реально мало осталось. Кстати, описательная часть самая сложная, сам в прошлом году диплом писал.


Название: Re: Пишу диплом!!!
Отправлено: meego_man от Май 12, 2011, 13:57
Чего же так категорически? Я писал диплом за месяц, причем на англ (который в тот момент был на достаточно плохом уровне). Судя по описанию само приложение простейшее, работы на пару-тройку выходных. А вот описательная часть конечно муторная. Для начала было бы неплохо выложить примерный каркас Вашего диплома, сколько страниц от вас ожидают, включаются ли туда страницы с кодом (если да, то вообще лафа). Какие требования к самому приложению: поддержка клиент/серверной технологии (архив на одном компе, просмоторщик на другом), нужна ли поддержка быстрого поиска по определенным критериям (возможно потребуется база данных с соответствующими полями) и т.п. А то из поста толком ничего непонятно, либо это я такой непонятливый ;)


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 12, 2011, 14:42
 касаемо времени :

 - у меня абсолютно свободны все дни вплоть до получения диплома - никакой работы, учебы, каких-то встреч и т.д - весь этот срок у меня выделен на дипломную;

касаемо приложения :

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

касаемо того что же конкретно мне надо получить на выходе :


 - естественно я не делаю какой - то монструозный комбайн.
 
- главное окно куда выводятся графические файлы (точнее их миниатюры )
- "окно" (как я понял лучше всего label ) для вывода выбраного изображени , естественно 
   уже полноразмерно
- окно для выбора альбомов (папок) :
 
  я просто решил (может быть и не лучшее решение) не использовать "дерево", а
  связывать папки с картинками напрямую с каким-то альбомом - т.е альбом это по сути
  папка + там конечно свои нюансы есть.. естественно я не знаю как это будет работать,
  но по крайней мере это вроде упрощает работу , чем как класифицировать по каким-то 
  параметрам;

- алгоритм поиска изображений - ищет и добавляет\связывает отдельную папку с альбомом;
 
- и еще какие-то задачи, которые появятся во время работы;

  Естественно изначально задачи стояли совсем другие; но сейчас я максимально все   
  упростил для себя; главное сдать его, а на оценку .. хрен с ней 

КОнечно если я успею все сделать, то какие-то фичи добавлю, чтобы приложение голым не было, но  каркас приложения я Вам описал.

P.s спасибо, за оказанное внимание

 

 
 


Название: Re: Пишу диплом!!!
Отправлено: blood_shadow от Май 12, 2011, 15:41
мне бы такой диплом... а то мехатроника бранная...


Название: Re: Пишу диплом!!!
Отправлено: NicK от Май 12, 2011, 18:16
Советую посмотреть в раздел Graphics Viewers на qt-apps.org.
http://qt-apps.org/index.php?xcontentmode=4222 (http://qt-apps.org/index.php?xcontentmode=4222)

Выберите какой-нибудь проект и посмотрите реализацию. Может очень сильно помочь в разработке собственного.
Или, если в условиях задачи это не оговорено, просто сделайте форк любого понравившегося проекта...  ;)


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 12, 2011, 19:30
 
 Спасибо за совет: некоторые примеры уже (на глаз - без "жесткого" досмотра) взял на заметку, хотя есть подозрение (исходя из опыта), что разобраться в чужом коде будет не очень просто; Но посмотрим...


Название: Re: Пишу диплом!!!
Отправлено: Ubuntu_linux от Май 12, 2011, 20:05
Можно использовать QListWidget  или QTableWidget


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 12, 2011, 20:17
а можно по-конкретнее?

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



Название: Re: Пишу диплом!!!
Отправлено: ieroglif от Май 12, 2011, 20:58
1. SQLite для базы данных.
2. MVC для получения и отображения данных
3. http://libqxt.bitbucket.org/doc/0.6/qxtflowview.html для красоты =)
4. переопределение QItemDelegate для отображения таблицы картинок
ну и т.д. =)
5. итого дня два взрыва мозга и всё будет написано =)


Название: Re: Пишу диплом!!!
Отправлено: Ubuntu_linux от Май 12, 2011, 21:02
Поясню, для самого простого(примитивного) случая. Будем использовать QTableWidget (таблица ) в качестве основного виджета где будут находится миниатюры изображений.
В качестве айтемов будем использовать QTableWidgetItem с методом

Код
C++ (Qt)
void setIcon ( const QIcon & icon )
Код
C++ (Qt)
int rows=10;
int columns=10;
QTableWidget *table=new QTableWidget( rows, columns);
 
for(int i=0;i<rows;i++){
for(int j=0;j<columns;j++){
table->setItem(i,j,new QTableWidgetItem(QIcon("icon/test.png"),"");
}}
 

В результате будем иметь сетку с изображений test.png



Название: Re: Пишу диплом!!!
Отправлено: Sancho_s_rancho от Май 12, 2011, 21:20
1. SQLite для базы данных.
2. MVC для получения и отображения данных
3. http://libqxt.bitbucket.org/doc/0.6/qxtflowview.html для красоты =)
4. переопределение QItemDelegate для отображения таблицы картинок
ну и т.д. =)
5. итого дня два взрыва мозга и всё будет написано =)
Ну вы и советчик. Это два дня для того, кто этими технологиями уже владеет и знает особенности распространения этого добра на целевой платформе.


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 12, 2011, 21:38
1. SQLite для базы данных.
2. MVC для получения и отображения данных
3. http://libqxt.bitbucket.org/doc/0.6/qxtflowview.html для красоты =)
4. переопределение QItemDelegate для отображения таблицы картинок
ну и т.д. =)
5. итого дня два взрыва мозга и всё будет написано =)

Согласен на счет того, что : "Это два дня для того, кто этими технологиями уже владеет", но
у меня Слава Богу есть больше двух дней; В принципе я этого и хотел - чтобы кто-то ткнул пальцем и показал куда именно надо смотреть, поэтому спасибо...
... но я еще не просмотрел инфу по поводу SQlite; не уточните : а для чего нам тут именно базы данных?









Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 12, 2011, 21:42
Поясню, для самого простого(примитивного) случая. Будем использовать QTableWidget (таблица ) в качестве основного виджета где будут находится миниатюры изображений.
В качестве айтемов будем использовать QTableWidgetItem с методом ...

 Спс; Я примерно так и предполагал, но просто не думал,что можно так просто в ячейки грузить
изображения...

Кстати, касаемо миниатюр; Мы то в ячейки грузим уже готовое изображение, ведь так?!
А нам необходимы миниатюры, причем не одной а нескольких (очень многих) фотографий; Я просто читал насчет этого - думал, что все просто, но оказывается с миниатюрами тот еще геморрой у людей бывает; Не только проблемы с реализацией, но и кто-то на скорость жаловался и т.д;
                                    
                        В общем кто в курсе того "как и что" - поясните плз;

спс.



Название: Re: Пишу диплом!!!
Отправлено: Ubuntu_linux от Май 12, 2011, 22:02
Сначала так сделай , а потом .......


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 12, 2011, 23:27
Ок; Я вроде немного разобрался с QTableWidget; Почитаю еще описание...

А есть еще предложения по реализации "окна для отображения миниатюр"?
Или QTableWidget самый "реальный" вариант для решения этой задачи?


Название: Re: Пишу диплом!!!
Отправлено: meego_man от Май 12, 2011, 23:33
Ок; Я вроде немного разобрался с QTableWidget; Почитаю еще описание...
А есть еще предложения по реализации "окна для отображения миниатюр"?
Или QTableWidget самый "реальный" вариант для решения этой задачи?
Еще предлагали QListWidget/QListView. Также часто используются для этих случаев. Для отображения большой картинки я бы все таки посоветовал вместо QLabel использовать что нибудь на основе QGraphicsView/QGraphicsScene (там достаточно легко реализовать тот же зум, если он нужен).


Название: Re: Пишу диплом!!!
Отправлено: Авварон от Май 12, 2011, 23:50
Ну сцену и для миниатюр можно использовать.
Так же в сцене можно огл ускорение прикрутить.


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 13, 2011, 00:24
Ну сцену и для миниатюр можно использовать.
Так же в сцене можно огл ускорение прикрутить.

Да, кстати я думал об этом и в принципе собирался использовать именно ее,
потому что сцена "гибче" (хотя мне сейчас конечно надо больше думать о простоте реализации), но совершенно не знаю как с какой стороны подойти к решению этой задачи:
- очень много "муток" разных и нюансов связанных с самим scene (но это решаеМо)
+
- сходу всплывает проблема с самими миниатюрами;
Как я уже отписывался - это тот еще геморрой (как говорят люди) - создание миниатюр изображений;

Если есть конкретные мысли касаемо решения проблемы с миниатюрами, то прошу их в студию!

спс



Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 13, 2011, 00:40
Еще предлагали QListWidget/QListView. Также часто используются для этих случаев. Для отображения большой картинки я бы все таки посоветовал вместо QLabel использовать что нибудь на основе QGraphicsView/QGraphicsScene (там достаточно легко реализовать тот же зум, если он нужен).

А Если все ж выбирать между Qlist и QTable: разве table не лучше подходит?
... Кстати, я правильно понял, что между ***Widget и ***View отличие заключается в том, что последний более "свободный"? (т.е больше каких-то настроек)


Название: Re: Пишу диплом!!!
Отправлено: ieroglif от Май 13, 2011, 01:09
1. база данных SQLite - позволяет хратить базу данных в одном файле и таскать его вместе с программой.
    кроме того в Qt практически во всех последних sdk драйвер базы SQLite идёт по умолчанию и не требуется дополнительного времени на сборку и подключение (если человек не особо с программированием - зачем ему это?)
база позволит нам хранить
1.1 таблица файлов
id(int)
file(QString)
datetime(QDateTime)
1.2. таблица дерева альбомов (у корневого альбома idParentAlbum=0)
id(int)
idParentAlbum(int)
name(int)
date(QDateTime)
1.3. таблица соотношений файлов к альбомам
rowId(int)
albumId(int)
photoId(int)

таким образом мы получаем прочную базу для ведения фотоальбома. (с полями сам играйся, логично =) )
2. получение данных из этих таблиц, и другая работа с ними в Qt элементарна. читать мануал по ключевым пунктам
2.1. QDatabase::addDatabase("QSQLITE");
2.2. QSqlTableModel::setTable(); QSqlTableModel::data(); (всё это описано хоть и на английском, но очень просто и понятно в общем мануале то ли по базам данных, то ли по MVC)
2.3. разобраться с моделью дерева, однако хорошая описана в examples и ищется в поиске хелпа по "Simple Tree Model Example" - её просто надо взять оттуда и чуть чуть переправить что бы она стала универсальной, и сохранить себе на будущее =) она может понадобиться для отображения дерева альбомов.

2.3. но скорее всего ещё понадобится создавать свою собственную модель, наследуемую, скорее всего от QAbstractListModel, ведь список альбомов/директорий в текущем "каталоге" - это лист. все подробности в мануале, часов за 6 разобраться реально со средним уровнем программирования. но пока дойдёт до этого пункта уже нахватается понимания, так что 2 часа :)

3. Views/Delegate классы. во-первых, рекомендую воспользоваться каталогом Qxt - там есть замечательное представление (класс, отвечающий за отображение и взаимодействие с пользователем) великолепно удовлетворяющее твоим потребностям. просто загляни по ссылке http://libqxt.bitbucket.org/doc/0.6/qxtflowview.html и посмотри картинку.
3.1. для отображения дерева альбомов сбоку - у тебя уже есть твоя готовая модель из пункта 2.3. - просто подключил и оно само заработало.. прописал сигналы-слоты кликов и прочих действий - таблица альбомов ожила.
3.2. заработали альбомы? лови их сигналы и отправляй модели файлов (которая обращается в QSqlTableModel за данными и уже на уровне SQL запроса отработать только нужные), подключи эту модель к Qxt вьюхе - у тебя появились файлы из альбомов..
3.3. клик по фото и вывод её на фулскрин. ну это уже будет просто, мне кажется =)

4. шлифовка
4.1 добавление фотографий в альбомы, организация файлов - ты хранишь только пути к файлам, или копируешь файлы себе? =) рекомендую первое - проще и дешевле. значит разобраться с QDir.
4.2. грамотно встроить в гуй работу с альбомами - чуть позаморачиваться, но сделать красиво, что бы пользователю высвечивалось предупреждение на всякие события с файловой системой типа "у вас появились новые фотографии, в какой альбом их?", потом высветить превьюшки фоток (тем же виджетом) и т.д. =) если реально парит - делать так, как проще всего, пусть и не удобно =)
4.3. QSS - общее офомрление стилями и прочим =)

удачи! за месяц точно должен управиться =)
если сядешь за комп как в попу укушеный ёжик - напишешь за пару дней =)


Название: Re: Пишу диплом!!!
Отправлено: ieroglif от Май 13, 2011, 01:21
по поводу миниатюр, если они понадобятся
1. изначально объяви что твоя программа поддерживает только JPG формат =) не будет проблем с плагинами форматов изображений =)
2. класс QImage ответить на ВСЕ твои потребности.


Название: Re: Пишу диплом!!!
Отправлено: Авварон от Май 13, 2011, 01:24
не jpg а png


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 13, 2011, 09:36
удачи! за месяц точно должен управиться =)
если сядешь за комп как в попу укушеный ёжик - напишешь за пару дней =)
Спс; У меня прямо-таки оптимистичный настрой появился; Я даже убрал ствол из верхнего ящика стола в нижний;
...
И на счет использования именно *.jpg, если честно я так и собирался сделать
...
не jpg а png
А вот тут немного не понял.


Название: Re: Пишу диплом!!!
Отправлено: Пантер от Май 13, 2011, 09:42
У jpg проблема с плагинами может быть. Поддержка же png не требует плагинов.


Название: Re: Пишу диплом!!!
Отправлено: Igors от Май 13, 2011, 09:51
Спс; У меня прямо-таки оптимистичный настрой появился;
Ничего, это проходит  :)


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 13, 2011, 09:53
Не знал... Хотя думается , что как бы мне ни хотелось боюсь не получится делать прогу в расчете только на *.png - в том смысле что формат не очень сильно распространен (ну может быть и распространен... я просто сравниваю с тем же *.jpg)
 Программа (если я ее напишу) которая читает только *.png - "ну не знаю, ... "  мне скажут при защите


Название: Re: Пишу диплом!!!
Отправлено: Пантер от Май 13, 2011, 09:53
Спс; У меня прямо-таки оптимистичный настрой появился;
Ничего, это проходит  :)
+1.
the_moop, ты пистолет-то далеко не убирай. ;)


Название: Re: Пишу диплом!!!
Отправлено: meego_man от Май 13, 2011, 13:58
Не знал... Хотя думается , что как бы мне ни хотелось боюсь не получится делать прогу в расчете только на *.png - в том смысле что формат не очень сильно распространен (ну может быть и распространен... я просто сравниваю с тем же *.jpg)
 Программа (если я ее напишу) которая читает только *.png - "ну не знаю, ... "  мне скажут при защите
а чего мучаться то с форматами, смотрим в Qt Assistant класс QImage.Там и jpg и png и еще несколько форматов. Единственно нужно помнить что с прогой придеться копировать все dll для чтения соответствующих форматов (из Qt директории). По поводу миниатюр, то тут проблема опять же решаема, у человека был гемор каждый раз их генерировать, вам же нужно их сгенерировать раз для каждого изображения и записать куда нить (хотя бы во вложенную папку каждого альбома, скажем папку назовете thumbnails).


Название: Re: Пишу диплом!!!
Отправлено: meego_man от Май 13, 2011, 14:00
Да, кстати я думал об этом и в принципе собирался использовать именно ее,
потому что сцена "гибче" (хотя мне сейчас конечно надо больше думать о простоте реализации), но совершенно не знаю как с какой стороны подойти к решению этой задачи:
- очень много "муток" разных и нюансов связанных с самим scene (но это решаеМо)
каких именно? в QGraphicsScene можно свободно запихивать стандартные виджеты, так что велосипед изобретать не придеться. Зато есть куча преимуществ, типа анимации и эфектов - ну это для красивостей когда все будет закончено  ;D


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 13, 2011, 15:32
 Взял книжный пример QGraphicScene и переделываю тихонько под свои нужды;
 выкинул ненужное (на мой взгляд);
 
 Сейчас пытаюсь "вывести картинку на сцену", однако она выводит изображение так, что в  
 центре находится ее верхний левый угол; А мне нужно чтобы изображение заполнило все  
 окно (т.е например большое изображение уменьшало до размеров окна);
 главное, что изображение под размеры окна я подогнал : fitInView()

 а вот вывести реально в центре - пока не получается
 Уверен, что есть какие-то свойства или методы, но  уже час ищу - не нашел ...

спс
 


Название: Re: Пишу диплом!!!
Отправлено: meego_man от Май 13, 2011, 16:13
а вот вывести реально в центре - пока не получается
 Уверен, что есть какие-то свойства или методы, но  уже час ищу - не нашел ...
Лучше всего выкладывать свой код сюда в атачменте, так легче понять где ошибка...


Название: Re: Пишу диплом!!!
Отправлено: GreatSnake от Май 13, 2011, 17:42
Цитировать
Сейчас пытаюсь "вывести картинку на сцену", однако она выводит изображение так, что в центре находится ее верхний левый угол
Цитировать
QGraphicsScene scene(QRectF(-100, -100, 640, 480));
Зачем сдвигаешь начало координат?


Название: Re: Пишу диплом!!!
Отправлено: GreatSnake от Май 13, 2011, 18:02
а мне нужно чтобы чтобы изображение подстраивалось под размеры окна а не наоборот
Ну дык и надо про это говорить.
См. здесь (http://www.prog.org.ru/index.php?topic=8266.msg102364#msg102364) или здесь (http://www.prog.org.ru/index.php?topic=15459.msg102220#msg102220).


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 13, 2011, 18:03
посмотрим, спс


Название: Re: Пишу диплом!!!
Отправлено: ieroglif от Май 13, 2011, 18:38
я, конечно, извиняюсь, что опять со своими 5ю копейками, но лучше сначала сделать базу - т.е. ядро системы, которое будет хранить данные, а уже потом отображать эти данные.
на время написания "внутренней части" всё можно проверять через qDebug(), или выводить что-то простое - к примеру, не сами картинки, а только пути к ним..


Название: Re: Пишу диплом!!!
Отправлено: ieroglif от Май 14, 2011, 00:13
Так а под "внутренней системой" Вы подразумеваете базу данных? я верно понял?
Или же: MVC ?
да, я имею в виду именно бд+мвц
делать это всё равно придётся =) а там всё достаточно просто, что бы уже через час видететь какие-то радующие результаты (причём которые уже переписывать вряд ли придётся)
программа всё равно будет хранить какую-то информацию - список файлов, их названия, структура альбомов.
если воспользоваться шаблоном MVC, то гуй - это дело 10ое и, к тому же, достаточно просто заменяемое.
поэтому если написать базу, то смотреть её можно будет через стандартные QTableView + QTreeView. и в последствии их будет просто поменять на другой View или дописать к ним делегатов для красивого отображения.
на самом деле, если убрать БД, а использовать QDirModel в качестве "албомы-фото" (т.е. использовать структуру директорий с файлами в качестве структуры фотоальбома) - то всё будет ещё проще и напишется за 2 часа полностью
QDirModel + QTreeModel в качестве структуры альбомов (пример описан в ассистанте MVC).
настроенный QDirModel + QxtFlowView в качестве листальщика фоток.
всё =)


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 14, 2011, 14:32
последовал Вашему совету : начал работать с\над БД;

Не знаю - то ли я чем-то не тем занимаюсь,то ли мне начало вести, но с бд все в принципе оказалось именно так как Вы и говорили - относительно просто;

Может быть к ночи потихоньку разберусь что к чему


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 14, 2011, 19:31
1. база данных SQLite - позволяет хратить базу данных в одном файле и таскать его вместе с программой.
    кроме того в Qt практически во всех последних sdk драйвер базы SQLite идёт по умолчанию и не требуется дополнительного времени на сборку и подключение (если человек не особо с программированием - зачем ему это?)
база позволит нам хранить
1.1 таблица файлов
id(int)
file(QString)
datetime(QDateTime)
1.2. таблица дерева альбомов (у корневого альбома idParentAlbum=0)
id(int)
idParentAlbum(int)
name(int)
date(QDateTime)
1.3. таблица соотношений файлов к альбомам
rowId(int)
albumId(int)
photoId(int)

таким образом мы получаем прочную базу для ведения фотоальбома. (с полями сам играйся, логично =) )
2. получение данных из этих таблиц, и другая работа с ними в Qt элементарна. читать мануал по ключевым пунктам
2.1. QDatabase::addDatabase("QSQLITE");
2.2. QSqlTableModel::setTable(); QSqlTableModel::data(); (всё это описано хоть и на английском, но очень просто и понятно в общем мануале то ли по базам данных, то ли по MVC)

Разбираюсь с базами данных... Сейчас задумался над тем, что ...:

Мне необходимо будет базу данных описанную в цитированном тексте заполнять;
Т.е нужно будет написать что-то вроде поискового алгоритма (немного "накрутил" конечно) который будет добавлять и искать ...
                    (я уже определился что буду работать только с jpg)
... картинки; Я еще определяюсь с базой данных - скоро дочитаю... поэтому заполнение бд становится актуальным;

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


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 14, 2011, 19:55
+
Дочитываю всем известную книгу Жасмин Бланшет - раздел посвященный базам данных;
Основы ... и еще, чтобы материал лучше осознать просмотрел раздел про МВЦ;

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

и в связи с этим Хочу спросить - мне получается сейчас уже можно составить БД? Просто исходя из того, что я только что прочел - делать тут почти нечего; вот и думаю : в чем подвох;


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 14, 2011, 20:00
И еще:

 Я так пока и не решил - эти таблицы должны быть связанными между собой КЛЮЧАМИ или это совсем необязательно?

Например, как я понял: можно связать "таблицу с файлами" с "таблицей с альбомами", тогда третья таблица получается не будет нужна;

С другой стороны : при таком подходе я вижу проблему в заполнении таблиц;

В общем я запутался: подгоните кто-нить свежу мысль , так как я еще всю информацию не "вкурил"


Название: Re: Пишу диплом!!!
Отправлено: ieroglif от Май 14, 2011, 21:16
1. для работы с SQLite базой я испльзую sqlitestudio-2.0 - работает отлично, позволяет быстро спроектировать и забить базу рыбой (тестовыми данными), что бы в Qt уже работать удобно было.
2. связывать ключами на уровне БД таблицы не обязательно. ты эти связки вполне можешь реализовать кодом - меньше заморочек будет.
3. в какие-то моменты ты можешь сам писать SQL запросы, что бы получать сразу нужные тебе данные в QSqlTableModel
4. "таблица файлов" может в себе содержать поле albumId для каждой записи. тогда третья таблица действительно будет не нужна, код программы окажется ещё проще, только один файл будет только одном альбоме. в случае промежуточной таблицы один файл может находиться в нескольких альбомах (пожалуй действительно излишняя функция =) )
5. да, по сути ты проектируешь базу используя sqlitestudio-2.0, забиваешь ручками туда тестовые данные (3-4 файла + 1-2 альбома), настраиваешь модели, подключаешь к ним вьюхи всё =)


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 14, 2011, 21:18
1. для работы с SQLite базой я испльзую sqlitestudio-2.0 - работает отлично, позволяет быстро спроектировать и забить базу рыбой (тестовыми данными), что бы в Qt уже работать удобно было.
да, тут я кстати сразу не сообразил, что это прямо отдельная ... А проблемы какие-то в освоении могут быть? ... хотя сейчас качну - проверю


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 14, 2011, 21:26
думаю все же еще придется мне перечитать "про базы данных", а пока:

но все-таки, как мне эти сами "таблицы" заполнять? Я так понимаю мне придется поработать с QDirModel? Или есть какие еще варианты?

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


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 14, 2011, 21:37
2.3. разобраться с моделью дерева, однако хорошая описана в examples и ищется в поиске хелпа по "Simple Tree Model Example" - её просто надо взять оттуда и чуть чуть переправить что бы она стала универсальной, и сохранить себе на будущее =) она может понадобиться для отображения дерева альбомов.

2.3. но скорее всего ещё понадобится создавать свою собственную модель, наследуемую, скорее всего от QAbstractListModel, ведь список альбомов/директорий в текущем "каталоге" - это лист. все подробности в мануале, часов за 6 разобраться реально со средним уровнем программирования. но пока дойдёт до этого пункта уже нахватается понимания, так что 2 часа :)

+ хотел такое спросить:

В принципе я конечно понимаю, что использование QDIR*** и "дерева" должно упростить задачу при работе с директориями и т.д... , но! ... думается мне, что это нечто избыточное в данном случае;

Так вот - если у меня "альбомы" связаны с конкретными "фотографиями", то почему мне просто не выводить список альбомов без мутни с "деревьями"? ведь если у меня есть имя файла (как я понял - это полный его путь) и имя альбома (полный путь папки) то и в дереве необходимости не будет;

Хотя конечно есть нюансы - если папок с картинками будет довольно много - то и альбомов будет много....

Да уж; Чем больше прочитываю, тем больше вопросов;

спс и извиняюсь за свои возможно () дЭбильные вопросы


Название: Re: Пишу диплом!!!
Отправлено: ieroglif от Май 15, 2011, 11:48
развлекайся :)
надо будет только скачать и собрать Qtx, в файле проекта поменять пути на то, куда ты установишь Qxt, и в файле mainwindow.cpp установить путь к папке фотографий.
dirModel->setRootPath("D:\\!Photos");
разумеется всё сыровато да кривовато (за 15 минут, фигли), но что бы понять что к чему да как - тебе точно хватит :)


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 16, 2011, 13:46
запустил; спс;

я пока не смотрел "что да как", но по-крайней мере собрал qxt... теперь могу со спокойным сердцем закончить бд


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 16, 2011, 13:54
+ :

хотел спросить - есть ли какая-то принципиальная разница в работе с бд на sqlitestudio и в qtcreator'e? просто в криэйторе есть возможность использовать вместо sql запросов обычный код c++; просто, вы же наверное не просто так посоветовали ее..поэтому хотел уточнить



Название: Re: Пишу диплом!!!
Отправлено: ieroglif от Май 16, 2011, 14:54
+ :

хотел спросить - есть ли какая-то принципиальная разница в работе с бд на sqlitestudio и в qtcreator'e? просто в криэйторе есть возможность использовать вместо sql запросов обычный код c++; просто, вы же наверное не просто так посоветовали ее..поэтому хотел уточнить


sqlitestudio позволит тебе работать с базой данных без пограммирования во время разработки и отладки.
не сразу же ты сможешь писать в базаду? для начала прочитай что там есть, а и когда писать туда будешь - тоже ведь надо проверять что всё пишется правильно. для этого и пользуй sqlitestudio - набил ручками данные, в Qt прочитал. сделал через Qt новые записи в базу - глянул через sqlitestudio что всё записалось верно..


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 16, 2011, 15:24
спасибо; я так и понял , но просто хотел уточнить - это  вроде как получается менеджер;






Название: Re: Пишу диплом!!!
Отправлено: ieroglif от Май 16, 2011, 16:36
спасибо; я так и понял , но просто хотел уточнить - это  вроде как получается менеджер;
типа того. просто инструмент облегчающий разработку


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 23, 2011, 18:23
вот контекст - это функция которая производит поиск файлов по маске :

Код
C++ (Qt)
void FileFinder::start(const QDir& dir)
{
   QApplication::processEvents();
 
   QStringList listFiles =
       dir.entryList(m_ptxtMask->text().split(" "), QDir::Files);
 
   foreach (QString file, listFiles) {
       m_ptxtResult->append(dir.absoluteFilePath(file));
   }
 
   QStringList listDir = dir.entryList(QDir::Dirs);
   foreach (QString subdir, listDir) {
       if (subdir == "." || subdir == "..") {
           continue;
       }
       start(QDir(dir.absoluteFilePath(subdir)));
   }
}
 

А вот собстенно строчка, по которой у меня вопрос

Код
C++ (Qt)
   QStringList listFiles =
       dir.entryList(m_ptxtMask->text().split(" "), QDir::Files);
 

я никак не могу "вкурить" что за фигня там с первым аргументом?
Почему я например не могу просто впихнуть туда строку-маску? Никак не пойму, хотя в доках тоже написано, что этот аргумент предназачен для для указания маски

Надеюсь я понятно изложил суть вопроса

Во избежание вопросов и для того чтобы стало еще  яснее:
Код
C++ (Qt)
m_ptxtDir    = new QLineEdit(QDir::current().absolutePath());
   m_ptxtMask   = new QLineEdit("*.cpp *.h");
   m_ptxtResult = new QTextEdit;
 

спс за внимание


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 23, 2011, 18:30
я просто понимаю, что что-то упустил ... но вот что...


Название: Re: Пишу диплом!!!
Отправлено: kambala от Май 23, 2011, 19:21
а что непонятного-то?
Код
C++ (Qt)
QStringList QDir::entryList(const QStringList & nameFilters, Filters filters = NoFilter, SortFlags sort = NoSort) const
первый параметр (список строк) - список допустимых расширений файлов. m_ptxtMask->text() вернет тебе одну строку "*.cpp *.h", а split(" ") разобьет эту строку по пробелам на список строк, т.е. у тебя выйдет список из 2-х элементов: ["*.cpp", "*.h"]


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 23, 2011, 19:43
значит все именно так как я понял, но тут всплывает самый главный вопрос:

та же конструкция должна будет работать, если вместо : m_ptxtMask->text()
"пихнуть" допустим : *.jpg  ?

Просто я так как бЭ и делаю, но вот.. результата нету


Название: Re: Пишу диплом!!!
Отправлено: kambala от Май 23, 2011, 19:50
Код
C++ (Qt)
QStringList listFiles = dir.entryList(QStringList("*.jpg"), QDir::Files);
так не работает?


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 23, 2011, 23:12
Код
C++ (Qt)
  foreach (QString file, listFiles) {
 
       query.prepare("INSERT INTO ImageTable"
                     "VALUES (:Name)");
       query.bindValue(":Name", dir.absoluteFilePath(file) );
   }
 

  Как Вы можете видеть я пытаюсь записать имя файла в таблицу Бд;
  Пытаюсь - потому что что - то не выходит;
 
  Сам думаю, что проблема в несоответствии типов, но может быть еще что -то есть...
 
 В общем, рад любой помощи


спс.


Название: Re: Пишу диплом!!!
Отправлено: Пантер от Май 24, 2011, 07:26
Код
C++ (Qt)
       query.prepare("INSERT INTO ImageTable (Name) "
                     "VALUES (:Name)");
 foreach (QString file, listFiles) {
       query.bindValue(":Name", dir.absoluteFilePath(file) );
       query.exec ();
   }
 


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 24, 2011, 08:19
Мне видимо снова надо будет перечитать раздел связанный с базами данных;

Спасибо большое;  Все прекрасно работает:

Записал пути к изображениям в базу данных - буду модифицировать код;
(если у кого-то есть мысли на этот счет - буду рад любым предложениям)


спс за внимание



Название: Re: Пишу диплом!!!
Отправлено: Авварон от Май 26, 2011, 18:57
топик стартер, личку проверяй


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 30, 2011, 11:27
) я  уже проверил)


Название: Re: Пишу диплом!!!
Отправлено: the_moop от Май 30, 2011, 11:35
сейчас на прогу немного подзабил - пишу оформление... а на прогу потом будет недели две еще