| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Религиозные войны > BCB и VCL vs Qt & mingw |
| Автор: Lazin 8.10.2007, 15:24 |
| В общем оппонент №1 - больше информации, все грабли заранее известны, полная обратная совместимость, стабильность, совместимость с Delphi, куча компонентов, бесплатность, возможно работать на уровне Win32 API. №2 - кроссплатформенность, продуманная архитектура (VCL тож не на коленке писали), так-же радует поддержка свг и юникода. В остальном всё не так радужно, я сомневаюсь что там можно обрабатывать сообщения windows или получить хэндл окна, помимо этого для того чтобы программы выглядели одинаково на всех платформах, контролы рисуются программно, ну и конечно отладчик gdb не способный нормально работать (попробуйте поставить точку останова в конструкторе). |
| Автор: Любитель 8.10.2007, 16:20 |
| Смешные какие-то аргументы против куте bool QCoreApplication::winEventFilter ( MSG * msg, long * result ) [virtual] WId QWidget::winId () const А в VCL аппаратно? О да, просто бесспорно В чём проблема? |
| Автор: nickless 8.10.2007, 17:11 |
| Нуу, это ж разве война... Lazin, полней аргументировать надо, и многие детали реализаций знать... а то так не интересно Хотя какие там могут быть аргументы против Qt... |
| Автор: archimed7592 8.10.2007, 17:33 |
Да это то изначально было понятно... Просто весело будет смотреть, как билдеристы будут потихонику о**евать от того как много кнопок они нажимают и как мало от этого получают |
| Автор: nickless 8.10.2007, 18:59 |
| Вообще можно было бы очень даже интересно поспорить, сравнить дизайн VCL и Qt, их достоинства, недостатки... Надо только гуру VCL неплохо знающего Qt в оппоненты Вообще VCL - довольно хорошая библиотека, только она спроектирована основываясь на возможностях языка Delphi, ну и вообще недостатков хватает, НО достоинства тоже есть, правда мне сейчас ни одного в голову не приходи Про достоинства Qt довольно часто говорят, дизайн удобный, продуманость, кроссплатформеность итд., а вот про недостатки (настоящие недостатки!) я что-то не припомню (а может их просто очень мало Так вот, предлагаю за отсутствием противников Qt (даже автора что-то не видно...), ну и так сказать для привлечения интереса Т.е. у кого есть к ней притензии, выкладывайте, может найдём решения для них, или багрепорт напишем, в споре рождается истина Мне не нравится реализация поддержки локалей в Qt, т.е. класса QLocale & Co. Он выглядит слегка недоделаным, например я не нашел способа отформатировать вывод денег с денежной единицей, хотя отформатировать просто число можно. Это неудобно, приходится дополнительно использовать стандартные способы. Это первое что прошло в голову, вспомню еще - напишу |
| Автор: archimed7592 8.10.2007, 19:24 |
| Попинаю VCL: 1. Есть ли там layout'ы? 2. А вы ими пользуетесь? 3. А почему ими не пользуется билдеровский дизайнер(сводя на нет преимущества лэйаутов, если они есть, конечно)? nickless, да, поддержки currency к сожалению нет, хотя... Не такая уж это большая проблема |
| Автор: Vyacheslav 8.10.2007, 19:31 | ||
| Я же говорил, ерунда получится. Нужны люди, которые делали приличные проекты и в том и в другом. А так кисло получается.
А Вы снизте уровень апломба и начните с недостатков С++Builder и предлагаемой им парадигмы визуального программирования, выполненной на основе принципов PME ( properties, methods, events ) Нижеследующие известные реально существующие недостатки можете сразу пропустить 1. Наличие VCL-классов, поведенияе которых в силу своего происходения в отдельных случаях отличается от стандарта. Ради справедливости надо отметить, что эти отклонения описаны в документации в соответствующем разделе хелпа. 2. Снижение попоулярности С++Builder вследствие идиотской политики топ-менеджеров фирмы Borland. Можно также сразу пропустить заблуждения о вопиющей несовместимости С++Builder со стандартом. Я правда с 2004 года на С++ Builder не пишу, но постаюсь ответить. |
| Автор: Lazin 9.10.2007, 08:06 | ||||||||||
1. А нах они там, вообще ненавижу layoutы, они не интуитивны, в VCL для этого есть свойства Anchors и Align - это намного удобней чем гадать как твоя форма будет выглядеть в итоге. 2. Их нет в VCL, как ими пользоваться?
Ну так если вы так напишите то кроссплатформенность коту под хвост.
Когда я начал изучать Qt, я обнаружил что примеры для Qt3 не работают с Qt4. Добавлено через 2 минуты и 9 секунд
Аты клавиатурой для написания программ совсем не пользуишся? |
| Автор: MAKCim 9.10.2007, 08:54 | ||||||
что конкретно показать?
а что, Builder позволяет кроссплатформенно обрабатывать сообщения Windows?
имелась в виду, думаю, мышка |
| Автор: Lazin 9.10.2007, 09:21 | ||
как использовать mingw + eclpse + gdb, чтобы это всё работало стабильно. К mingw претензий у меня нет, но вот gdb у меня работал нестабильно, версий 6.6 и более ранних. Кстати ктонибудь сдесь кроме Vyacheslav использовал ВЦЛ в серьезном проекте? Это я о том что в принципе по организации, все эти библиотеки не сильно друг от друга отличаются. Если к примеру нужно что-нибудь рисовать на форме (виджете, окне) то последовательность действий везде одна и та-же: VCL ловим событие OnPaint, получаем Canvas компонента (формы), и рисуем.. Qt ловим событие - аналог OnPaint? получаем QPainter рисуем... wxWidgets в обработчике OnPaint получаем wxDC... вынь32 api по событию WM_PAINT получаем HDC......... единственное, что серьезно отличает Qt - это сигналы-слоты, в остальном тоже самое |
| Автор: archimed7592 9.10.2007, 17:59 | ||||||||||
PME является основой и Qt в том числе... Насчёт недостатков - что насчёт лэйаутов?
Pixel hunting по определению не может быть удобнее layout'ов. Пусть даже будут предоставлены костыли, дабы уменьшить количество почти ручных вычислений координат. Попробуй динамически сконструировать очень сложную форму - поймёшь о чём я говорю.
Уважаемый, может быть мы обойдёмся без настолько смешных аргументов?
Знаешь сколько существовала Qt-3, пока не появилась Qt-4? За такой период любая система должна пересматриваться, рефайниться. Во-первых, есть целый ман по протированию qt3-qt4. Во-вторых - такова политика компании(улучшать дизайн, но оставлять лазейки для совместимости) и это, ИМХО, самая правильная политика.
http://forum.vingrad.ru/index.php?showtopic=49632&view=findpost&p=1279508 Добавлено через 2 минуты и 42 секунды Да уж... вынь32 api от Qt отличает только отсутствие сигнало-слотов... Тогда спорить, думаю, бессмысленно |
| Автор: Vyacheslav 9.10.2007, 19:59 |
| Ну вообще то я - лентяй. А лень как известно двигатель прогресса. Меня то и С++ в свое время привлек тем, что в нем можно лаконично писать код. С++Builder продолжил эту славную традицию посредством визуального программированя. Умело пользуясь предоставленными компонентами можно создать относительно сложный пользовательский интерфейс не написав ни строчки кода. С учетом того, что разработка интерфейса может в отдельных проекта занимать до 70% рабочего времени, С++Builder любезно берет этот тяжкий труд на себя, оставляя мне больше времени на бизнес логику. Например программку, которая обеспечивает манипулции со списками межуду двух листбоксов ( копирование или перемещение из одного в другой и обратно, удаление ) я могу создать вообще не написав ни строчки кода ( вообще у меня мания на этот счет - писать как можно меньше) Весь функционал будет создан только средствами дизайна. При этом программа сможет перемещать, копировать выделенные данные из одного списка в другой или удалять их по нажатию соответствующей кнопки, а также следить за состоянием этих кнопок и управлять их доступностью, исходя из конкретной ситуации. О layout'ах. Да есть такое упущения: разработчики не предусмотрели "стандартного" менеджера. Но кто мешает создать свой менеджер. Кстати , библиотеки с компонетами от сторонних разрабочиков очень часто предоставляют такие менеджеры для своих компонетов (DEV Express, например) Что касается форм, то я обычно выбирад другой путь. Разработка проекта начиналась обычно с создания своих компонентов и базовых форм со своими нужными мне проперятями и событиями, шаблонов проектов модулей, которые интегрировались в IDE и использовались как стандарные формы. Например в одном из проектов , для создания нового плагина достаточно было открыть соответствующий шаблон проекта, заполнить в соответствии с инструкцией требуемые проперти, в заданном месте написать реализацию функционала. Там же в IDE после тестирования и готовности модуля мог запустить его на инсталяцию ( пунктик был в меню): и соответствующий функционал, встроенный в IDE пересобирал заланный модуль, зачитывал номер версии и билда, регристрировал(обновлял) этот модуль и версию в БД и в нее же загружал исполняемый модуль. После этой процедуры обновленный модуль становился доступным пользователям. Программирование напоминало больше технологический процесс, нежели творчество. А как Вам например компонент-оболочка вокруг RASDial, написанный мною, который мог осуществлять дозвон и соединение прямо в дизайне или хотя бы те же стандпартные компоненты позволяющие подключаться к БД и выводить содержимое также в дизайне, еще до начала, собственно , самого программирования? Ну и пару слов о кроссплатформенности. С++Builder 6 предоставлял таку возможность. Наряду с узкозаточенной VCL, в комплект входила и другая визуальная библиотека CLX. Создав приложение на CLX, я мог перенести код на Linux и спомощью C++ Kylix 3 собрать его там. Это достигалось тем, что CLX, которая обеспечиавоа прицип RAD, являлась настройкой над ... Qt С одной стороны можносделать вывод, что без Qt никуда, а с другой - что возможности предоставляемые QT на уровень RAD не тянут и она по своей сути остается ресурсоориентированной библиотекой, так же как MFC, wxWIndows и пр. Это был весьма многообещающий проект, но к сожалению во-первых похоже не сошлись по цене с разработчиком, а во-вторых для меня он потерял свою прелесть из-за идиотского подхода Borland : они вокруг QT соззали врапер из дельфийскизх CLX классов и эти классы предложили использовать в C++ Kylix/C++Builder. В результате на выходе получился бутерброд C++(QT)->Delphi(CLX)->C++(приложения ). Соответсвенно получили итог: дельфийцам межплатформенность не нужна - у них уже есть воя ниша. Те, кто пишет на С++Builder - подход показался черезчур экзотичным. CLX и Kylix канули в лету |
| Автор: Lazin 9.10.2007, 21:44 | ||||||
Ну вообще в VCL используется тот-же принцип что и в winforms, у каждого компонента есть свойства Anchors и Allign, которые позволяют очень удобно группировать контролы на форме, и позволяет, в частности, избежать использования вложенных layout-ов. Но если очень этого хочется, в BDS2006 добавили новые стандартные компоненты FlowPanel и GridPanel, делающие то-же что и Layout-ы.
Не знаю, есть ли аналог в Qt, но в VCL имеется оч. удобная весчь - TFrame, с помощью которой можно очень сложный динамический интерфейс сделать, частично, в дизайнере. Помимо этого можно как угодно переделать уже готовую форму, даже если ее написал не ты, и нет исходников. Можно, к примеру, добавить свои элементы управления на стандартный диалог выбора цвета, или удалить оттуда что-нибудь. Только жаль что для этого уже придется программировать
Я совсем не это имел ввиду, а то что удобный дизайн, это удел не только Qt. |
| Автор: JackYF 10.10.2007, 07:58 | ||
на удивление конструктивненькая дискуссия...
чисто на интерес - а теперь на чём пишешь? |
| Автор: Vyacheslav 11.10.2007, 13:34 |
До недавнего момента VC6. Разрабатывал в основном консольные кроссплатформенные приложения: разработка и сборка Windows на VC6, на Linux - gcc, на HP - acc. А на данный момент в виду отсутствия проектов - ASP.Net |
| Автор: Любитель 13.10.2007, 20:18 | ||||||||
Супер описание алгоритма! Долго смеялся. Любая программа как пишется - берём да пишем
Мог... А вот реально никто почему-то таким не занимался
Ага, Qt 2
Сколь тонкий юмор! Вы хотели обрабатывать сообщения винды (зачем - не знаю, мне ни разу в куте сие не понадобилось, ибо всё, что нужно уже обрабатывается в недрах библиотеки) - обрабатывайте. При чём тут кроссплатформенность? Кроссплатформенность достигается переходом на более высокий уровеь абстракции, сообщения винды явно не тот уровень Насчёт RAD - во-первых, это в принципе зависит не от либы, а от ИДЕ (точнее того набора этихсамых RAD-инструментов). Мы вроде не собирались ИДЕ обсуждать. Тем не менее у куте отличный простор для создания всяких подобных средств благодаря развитой системе метаинформации (хотя лично мне не нравиться то, что это система не родная для C++, впрочем тяжело представить возможность "родной" реализции всего ентого дела). Вообще, обсужждение обречено на провал с самого начала... |
| Автор: MrCherry 15.10.2007, 09:49 | ||
имхо переписать весь билдер только с точки зрения с++ - получится замая афиигенная вещь всех времён и народов, да и сейчас вполне интересная штука... |
| Автор: Lazin 15.10.2007, 11:26 | ||||
http://forum.vingrad.ru/forum/topic-176715/kw-виджет-ввод-курсор-запрещение.html в VCL эта проблема решилась бы просто: TextCtrl->ReadOnly = true; или можно установить стиль ES_READONLY. а в Qt:
Есть подозрение что многие проблемы в Qt решаются именно так |
| Автор: archimed7592 15.10.2007, 11:30 | ||||
И что, после этого отключилось бы контекстное меню?
Да будет тебе известно, что все три предложенных мною способа кроссплатформены(другой вопрос о их работоспособности - Кусто что-то молчит, не отписывается). |
| Автор: JackYF 15.10.2007, 11:35 |
У Кусто целые выходные были... гм... траблы с оборудованием, которые только вчера вечером начали решаться... Как только руки дойдут, я займусь той темой опять... ещё один недочитавший мой первый пост в той теме... От меня дальше: перестало бы работать выделение текста? Перестал бы изменяться курсор? |
| Автор: Lazin 15.10.2007, 12:02 |
Ну тогда можно добавить edit->PopupMenu = new TPopupMenu(this); или edit->Enabled = false; edit->Color = clWindow; |
| Автор: archimed7592 15.10.2007, 12:09 | ||
Угу, угу... И т.д. и т.п. - чем больше требований тем больше кода... Что уж будет когда ты наконец прочитаешь топик внимательно и наконец то узришь там, что контрол произвольный(может быть совсем не edit)... |