Russian Qt Forum
Ноябрь 22, 2024, 22:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Почему вы используете/не используете Qt (windows-платформа)  (Прочитано 30723 раз)
marbius
Гость
« : Май 23, 2011, 16:56 »

Собственно сабж.

Желающие могут не читать следующее "повествование", в котором описана мотивация данного вопроса.


Вопрос у меня возник из-за того, что однажды мне потребовалось по быстрому накидать с виду простенькое приложение: база данных, некоторые диалоги ввода и запроса данных, вывод статистики по накопленным данным в виде простых табличных отчетов.
Казалось бы, ничего сложного в этом нет. Но опыт работы с Qt у меня в большей мере академический, нежели профессионально-практический, т.е. я хотя и могу написать небольшое приложение на Qt, но это пока для меня всего лишь этап обучения. В меньшей мере я знаком с работой с базами данных, вернее, мануалы читал и более-менее понимаю, что к чему, но практически не писал еще ни одного приложения с поддержкой БД.

Т.к. изначально приложение подразумевалось как локальное без поддержки сетевой БД, то встал вопрос, на чем "писать" БД?

Ответ для меня казался очевидным: SQLITE, но не тут-то было - чтобы научить SQLITE обрабатывать регистронезависимый LIKE нужно было чуть напрячь силы, что было проделано и решено, но осадок-то остался )) Еще одна ложка дегтя: у меня уже была некая база данных на SQLITE, которая использовалась в другом ПО, написанном под win то ли на Delphi, то ли на Bulder'е; но как выяснилось данные в ней были "забиты" в win1251 и отказывались нормально (без кракозябрб) отображаться стандартными средствами Qt без применения "костылей" и/или перекодировок исходной БД. С небольшими потугами и это было преодолено, но опять-таки осадок остался...

Позже было решено вообще перенести БД на firebird-embed под win: опять танцы с бубном в несколько часов по сборке более-менее работающего QIBASE, но не понравились некоторые ограничения на LGPL QIBASE. Вроде ничего страшного, но все же...

Дошло дело до отчетов: "поплясал" с ncreport пару дней, но в итоге все заработало. Не понравилась его "медлительность".
В итоге более-менее работоспособное приложение было готово и пришел черед его дистрибуции )) Под "дистрибуцией" я здесь подразумеваю перенос бинарников на рабочее место, где приложение должно было работать. И, о ужас, дистрибутив  занимал почти 40 МБ: ладно, сетка локальная, 100 Мбит/с, размер не существенный, можно поставить всем пользователям.

Тут также не понравился еще один момент(на win-платформе): если даже на компьютере были библиотеки Qt, но другой версии, приложение отказывается работать, т.о. простой перенос бинарника приложения не гарантирует его работу, приходится тянуть все зависимые библиотеки... А, библиотеки не получается разместить единовременно в директории windows или system(32) - могут отказаться работать потенциально имеющиеся другие приложения Qt, если таковые были, а библиотеки Qt для них были установлены в эти системные директории. Значит приходится таскать весь груз зависимостей с дистрибуцией...

Ради эксперимента, запустил "старый-добрый" Delphi и выполнил то же самое приложение суммарно не более чем за 1 сутки времени размером "дистрибуции" 8 МБ в едином exe-файле (ну, плюс файл БД и sqlite3.dll) с поддержкой таблиц SQLITE, заведомо заполненных в кодировке win1251; с поддержкой freereport; против двух недель "танцев" и около 40 МБ зависимых библиотек (само приложение занимало чуть более 2 МБ) на Qt.

Вот и возник вопрос, а почему все же вы используете Qt?
Чем вас привлекает Qt, кроме "Write Once, Deploy Anywhere" и, для некоторых, "LGLP"?

Просто лично для себя я сделал вывод: если надо очень скоро написать приложение под win, то лучше все же использовать "старый-добрый" Delphi (Builder) с его(их) кучей "готовых" решений...

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

P.S. данный пост не подстрекает к холивару
« Последнее редактирование: Май 23, 2011, 17:01 от µarbius » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Май 23, 2011, 16:58 »

Было
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Май 23, 2011, 18:00 »

никогда не работал с базами данных, на qt разобрался за 20 минут, все прекрасно работало.
а можно вопрос - а дельфи у вас купленная?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Май 23, 2011, 18:26 »

Вот и возник вопрос, а почему все же вы используете Qt?
Чем вас привлекает Qt, кроме "Write Once, Deploy Anywhere" и, для некоторых, "LGLP"?

Просто лично для себя я сделал вывод: если надо очень скоро написать приложение под win, то лучше все же использовать "старый-добрый" Delphi (Builder) с его(их) кучей "готовых" решений...

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

P.S. данный пост не подстрекает к холивару
Улыбающийся Никогда не работал с БД, но Ваш вопрос достаточно общий. Дело в том что Вы судите с высоты достигнутого опыта - и, не в обиду Вам, Ваша оценка необъективна. Да если я "в своей нише", если задача типовая (в смысле половина и больше мне хорошо знакома), то вопрос только в том "какая оплата в час" - и все. Но совершенно неправильно обобщать этот подход.- когда о задаче ничего (или почти ничего) неизвестно - никаких "заведомых" преимуществ у Вас не будет, и неизвестно что легче выучить - "ту" систему или "эту". Ясно только что учить все равно придется  Улыбающийся   
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #4 : Май 24, 2011, 01:42 »

против двух недель "танцев" и около 40 МБ зависимых библиотек (само приложение занимало чуть более 2 МБ) на Qt
Это ж вы чего туда набрали?
4.7.3-mingw: mingwm10.dll+libgcc_s_dw2-1.dll+QtCore4.dll+QtGui4.dll+QtSql4.dll+qsqlite4.dll = 12,5Мб. Откуда ещё 27,5?

Если размер дистрибутива так уж важен - один раз разобраться со статической компиляцией (да, один раз прийдётся потратить время, чтобы разобраться). Получите независимый exe, который после upx'а будет весить едва ли больше 4Мб.

А вообще, если не нужна кроссплатформенность и важен малый объём исполняемого кода - имеет смысл смотреть в строну дотнэтов.

Ради эксперимента, запустил "старый-добрый" Delphi и выполнил то же самое приложение суммарно не более чем за 1 сутки времени размером "дистрибуции" 8 МБ в едином exe-файле (ну, плюс файл БД и sqlite3.dll) с поддержкой таблиц SQLITE, заведомо заполненных в кодировке win1251
Да, тут библиотеки Qt не сдюжили. Правда такое использование, как я вам уже объяснял, противоречит документации по SQLite.
Ради интереса предлагаю взять правильную базу с SQLite с произвольной допустимой кодировкой (utf-8 или любой из utf-16) и посмотреть насколько удобно будет с ней общаться средствами той сами Delphi библиотеки (результата не знаю - может это там и предусмотренно, но что-то мне подсказывает...).

Ради эксперимента, запустил "старый-добрый" Delphi и выполнил то же самое приложение суммарно не более чем за 1 сутки времени размером
1) Писать на том языке, среде, фреймворке, который знаешь всегда проще и быстрее.
2) Задача в данном случае была довольно специфичная, как я уже выше писал.

Просто лично для себя я сделал вывод: если надо очень скоро написать приложение под win, то лучше все же использовать "старый-добрый" Delphi (Builder) с его(их) кучей "готовых" решений...
Обобщу: если надо очень скоро написать приложение, то лучше все же использовать то, чем владеешь.

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

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

Кроме того, в Qt Creator'е:
- не очень удобный дизайнер, а на небольших разрешениях экрана - вообще непригодный к использованию,
- с gdb под win нередки проблемы с сегфолтами и падениями.
« Последнее редактирование: Май 24, 2011, 13:16 от LisandreL » Записан
voral
Гость
« Ответ #5 : Май 24, 2011, 11:11 »

Собственно сабж.
У меня есть честно купленный Visual Studio 2005. Сейчас я его снес. Основная причина кроссплатформенность.

Вопрос с кодировкой решается вовсе не костылями. А вполне нормальными директивами выбора нужной кодировки. Не?


размером "дистрибуции" 8 МБ в едином exe-файле (ну, плюс файл БД и sqlite3.dll) с поддержкой таблиц SQLITE, заведомо заполненных в кодировке win1251; с поддержкой freereport; против двух недель "танцев" и около 40 МБ зависимых библиотек (само приложение занимало чуть более 2 МБ) на Qt.
Ну так. А что вы хотели? Программа на делфи использует стандартные виндовые библиотеки. А наличие Qtшных библиотек в замен виндовых нормальная цена за кроссплатформенность. Будет у вас 2 или больше программы на Qt. И этот минус сойдет на нет практически совсем.

Вот и возник вопрос, а почему все же вы используете Qt?
Чем вас привлекает Qt, кроме "Write Once, Deploy Anywhere" и, для некоторых, "LGLP"?
Есть много удобных классов которых мне не хватало в MFC и delphi. (По сравнению с delphi еще и язык мне больше нравится)

ение под win, то лучше все же использовать "старый-добрый" Delphi (Builder) с его(их) кучей "готовых" решений...
Qtшная куча лично мне показалась более объемной (в смысле полезного объема)Улыбающийся

Записан
BRE
Гость
« Ответ #6 : Май 24, 2011, 12:08 »

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

4.7.3-mingw: mingwm10.dll+libgcc_s_dw2-1.dll+QtCore4.dll+QtGui4.dll+QtSql4.dll+qsqlite4.dll = 12,5Мб. Откуда ещё 37,5?
40,0 - 12,5 = ?
Записан
zenden
Гость
« Ответ #7 : Май 24, 2011, 12:56 »

msvc 2008
QMAKE_CFLAGS_RELEASE    = -O1 -Os -MT

configure.exe -fast -static -release -qt-zlib -no-gif -no-stl -no-libpng  -no-libmng  -no-libjpeg -no-libtiff -no-exceptions  -no-webkit -no-rtti -no-phonon -no-qt3support -no-multimedia  -no-native-gestures -no-plugin-manifests -no-openssl -no-script -no-scripttools -no-declarative -no-style-plastique -no-style-cleanlooks -no-style-motif -no-style-cde -no-style-windowsce -no-style-windowsmobile -no-accessibility -no-opengl -no-openvg -no-dbus

К тому же вырезано всё что только можно в qfeatures.h

Полученный размер стат. сборки с использованием QtCore + QtGui + QtNetwork составляет  3,9 МБ (1.6 Мегабайт в архиве 7zip)..  
Всё равно не могу понять, откуда берутся эти мегабайты. Было бы интересно найти улититу, которая может показать какие классы и методы попадают в конечный бинарник.
« Последнее редактирование: Май 24, 2011, 13:04 от zenden » Записан
alexman
Гость
« Ответ #8 : Май 24, 2011, 13:16 »

против двух недель "танцев" и около 40 МБ зависимых библиотек (само приложение занимало чуть более 2 МБ) на Qt
Это ж вы чего туда набрали?
4.7.3-mingw: mingwm10.dll+libgcc_s_dw2-1.dll+QtCore4.dll+QtGui4.dll+QtSql4.dll+qsqlite4.dll = 12,5Мб. Откуда ещё 37,5?
27.5 Улыбающийся

Сорри за флуд, позже увидел пост BRE!
« Последнее редактирование: Май 24, 2011, 13:17 от alexman » Записан
Wlad_C
Гость
« Ответ #9 : Май 24, 2011, 14:06 »

Долгое время программировал в Билдере. Года три назад попались мне исходные тексты на Qt. Заинтересовало. Как раз и время свободное было. Решил попробовать сам что-нибудь написать. Приведу далеко не все аргументы, а только те, которые в то время заставили меня распрощаться Билдером:
1. Лайоуты. Разве Вам не приходилось встречаться с тем фактом, что Ваша форма на экранах с разным разрешением и разными настройками Винды отображается неправильно (не помещается весь текст, компоненты куда-то уехали и т.д.)? Да, эта проблема решается, но кодировать надо самому. А на сложной форме, да не одной, это еще тот геморрой! Лайоуты снимают эту проблему без каких-либо затрат с моей стороны!
2. Сигналы и слоты позволяют решить много проблем и сильно облегчают жизнь. Например, отделить формы от расчетной части. В Билдере я это тоже делал, но уж больно некрасиво это получалось (если вообще получалось). 
3. Локализация. В Qt есть механизм локализации, и нечего самому придумывать не надо!
4. Как говорилось выше, библиотека Qt ОЧЕНЬ ПРОДУМАНА. И многие мелочи, что мне приходилось в компонентах Билдера дописывать из раза в раз самому, в Qt  уже реализованы в классах.

Поначалу, пока не освоился с Qt, маленькие программки (однодневки) тоже быстрее писались на Билдере. Но со временем надобность в нем отпала и я Билдер снес!

Да, среда программирования у  Билдера мощная, но Qt Creator не стоит на месте а быстро развивается. И на сегодняшний день в нем есть фишки которых мне не хватало в Билдере. Например, показать где используется. Очень полезная вещь, особенно когда правишь программу написанную год назад, и уже подзабыл многие связи в ней. А вообще спорить о IDE можно, но бесполезно. Все определяется привычкой.
Записан
marbius
Гость
« Ответ #10 : Май 24, 2011, 17:09 »

Для интересующихся "размером": ну откуда вы взяли, что именно этими библиотеками ограничивается набор? я про это вроде не говорил, считайте
+ QtWebKit4.dll ~16 МБ - пришлось поиспользовать для генерации отчетов
+ QtScript4.dll ~2 МБ   - пришлось поиспользовать для генерации отчетов
+ firebird-embedded ~8 МБ
- sqlite.dll
и далее
+ приложение (с графическими ресурсами) ~2 МБ
+ база ~4 МБ
ну, если этап округления кого и обидел, то извините. соль-то не в этом, правильно я собрал (или даже написал)  свое приложение, или нет; даже не в том, что я не доволен, что приходится таскать груз зависимостей; и даже не в моей субъективной оценке...
Суть топика не "унизить" Qt, а узнать мотивации людей, почему они используют Qt в своей работе?
Лично мне многое нравится в Qt, но есть один тормозящий меня момент: не очень развитый набор именно готовых GUI виджетов и компонентов, поэтому в большинстве своем приходится писать велосипед, хоть и потенциально кросс-платформенный, но велосипед, что ЛИЧНО МЕНЯ не устраивает в написании, как выразился Wlad_C, однодневок. Я не спорю, опыт у меня не шибко велик, о чем и было написано изначально.

« Последнее редактирование: Май 24, 2011, 17:11 от µarbius » Записан
marbius
Гость
« Ответ #11 : Май 24, 2011, 17:44 »

Вопрос с кодировкой решается вовсе не костылями. А вполне нормальными директивами выбора нужной кодировки. Не?
буду очень признателен, если поможете обойти методом отличным от того, который предложил LisandreL в топике http://www.prog.org.ru/topic_18057_0.html
Записан
marbius
Гость
« Ответ #12 : Май 24, 2011, 18:08 »

а можно вопрос - а дельфи у вас купленная?
я отвечу вопросом на вопрос, можно? А Вам зачем?  Подмигивающий

Если размер дистрибутива так уж важен - один раз разобраться со статической компиляцией (да, один раз прийдётся потратить время, чтобы разобраться). Получите независимый exe, который после upx'а будет весить едва ли больше 4Мб.

Думаю, ответ вы поймете?
« Последнее редактирование: Май 24, 2011, 18:12 от µarbius » Записан
alexman
Гость
« Ответ #13 : Май 24, 2011, 18:13 »

В qt реализованы все необходимые виджеты. Если нужны какие то спец-ые - пишите сами...для этих целей все реализовано. Тем более всем не угодишь: для одно один набор контролов очевиден для включения, для другого другой!
Записан
voral
Гость
« Ответ #14 : Май 24, 2011, 18:39 »

Вопрос с кодировкой решается вовсе не костылями. А вполне нормальными директивами выбора нужной кодировки. Не?
буду очень признателен, если поможете обойти методом отличным от того, который предложил LisandreL в топике http://www.prog.org.ru/topic_18057_0.html

А вы не пробовали отправить базе:
Цитировать
SET names cp1251
?

У меня нет под рукой подходящей заготовки. Ка то давно цеплялся к базе firebird (к сожалению все было ради теста qt и код не сохранил) - могу ошибаться но именно так и делал.
« Последнее редактирование: Май 24, 2011, 18:42 от voral » Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.144 секунд. Запросов: 23.