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

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

Страниц: 1 ... 11 12 [13] 14   Вниз
  Печать  
Автор Тема: Qt vs VCL  (Прочитано 124876 раз)
niXman
Гость
« Ответ #180 : Июль 15, 2009, 21:42 »

Не устали холиварить? Улыбающийся
А сколько бы полезного кода вместо этого было бы написано!
Я абсолютно со всеми согласен. Спорить не стану. Да да да, С++ - лучший язык программирования, а Qt - лучшая библиотека для построения GUI.
Это истина. С ней не поспоришь.

п.с.
http://www.prog.org.ru/index.php?topic=9980.msg58430#msg58430
Записан
ритт
Гость
« Ответ #181 : Июль 15, 2009, 23:05 »

собсна, я отвечаю в паузах "на раздумье" в процессе написания полезного кода Улыбающийся
Записан
ритт
Гость
« Ответ #182 : Июль 15, 2009, 23:17 »

мля...
я думал, это старую ветку подняли, а там (страниц на пять-семь) раньше столько смешного! завтра почитаю с утреца - подниму себе настроение Улыбающийся
Записан
Tonal
Гость
« Ответ #183 : Июль 16, 2009, 09:19 »

Вроде тебе два раза писали что с этим проблем нет. Я напишу третий раз . Использовал исключения в проэктах с Qt не было проблем
Попробуй выбросить исключение в слоте или eventFilter.
В DeBuildre-е и в С++ разные модели обработки исключений. Улыбающийся
В С++ считается, что если исключение нигде в программе не обработалось, то программа должна умереть.
Именно это и происходит в Qt если необработанное исключение долетело до цикла сообщений оно погасит его и пролетит дальше.
При этом все ресурсы корректно освобождаются.
Кстати, если слот связан с сигналом как DirectConnection, то исключение сначало прилитит в точку возбуждения сигнала, где его можно перехватить стандартными средствами. Улыбающийся

В VCL-е принята другая политика - необработанное исключение гасится в цикле сообщений.
Кстати так же ведёт себя и PyQt. Улыбающийся

Да, вот что написано в исходниках Qt по этому поводу:
Цитировать
QEventLoop::exec
Qt has caught an exception thrown from an event handler. Throwing
exceptions from an event handler is not supported in Qt. You must
reimplement QApplication::notify() and catch all exceptions there.
Так что всё в твоих руках.

Правильно с точки зрения чего? Еще раз повторюсь, подобное уже было в Qt3 и от этого ушли, это пройденный этап. В Qt4 совершенно другой подход. Поищи по форуму, уже когда-то обсуждалось
Правильно с точки зрения удобного и быстрого процесса разработки софта.
Ты видимо хотел написать не разработки софта а клепария прототипов? Улыбающийся
Записан
BigZ
Гость
« Ответ #184 : Июль 16, 2009, 12:17 »

Да, вот что написано в исходниках Qt по этому поводу:
Я это читал. Поэтому сделал такие выводы насчёт исключений.
Вот ситуация, я создаю поток QThread. Но в системе закончились свободные хендлы (случай сервера). Функция CreateThread платформы не смогла создать поток. Как Qt мне сообщит об этом?
Другой пример содаю QWidget, но платформа не смогла создать окно. Как я об этом узнаю?

Ты видимо хотел написать не разработки софта а клепария прототипов? Улыбающийся
А что на Qt быстро разработать качественный софт нельзя?Улыбающийся
« Последнее редактирование: Июль 16, 2009, 12:31 от BigZ » Записан
Tonal
Гость
« Ответ #185 : Июль 16, 2009, 12:36 »

Да, вот что написано в исходниках Qt по этому поводу:
Я это читал. Поэтому сделал такие выводы насчёт исключений.
Использовать исключения так, как ты это делал в дельфях нельзя.
Сделать нужную тебе обработку - можно.

Ты видимо хотел написать не разработки софта а клепария прототипов? Улыбающийся
А что на Qt быстро разработать качественный софт нельзя?Улыбающийся
Вполне можно. Но приёмы несколько различаются.
Ведь и топором и пилой можно запросто свалить столб, но делать при этом нужно кардинально разные движения. Улыбающийся
Записан
shadone
Гость
« Ответ #186 : Июль 19, 2009, 18:11 »

Да, вот что написано в исходниках Qt по этому поводу:
Я это читал. Поэтому сделал такие выводы насчёт исключений.
Вот ситуация, я создаю поток QThread. Но в системе закончились свободные хендлы (случай сервера). Функция CreateThread платформы не смогла создать поток. Как Qt мне сообщит об этом?
Другой пример содаю QWidget, но платформа не смогла создать окно. Как я об этом узнаю?

если QThread::start не смог создать поток то isRunning вернет false. Но такая ситуация маловероятна на мой взгляд.
QWidget по-умолчанию не использует платформо-зависимые window handle, поэтому такая ситуация маловероятна. (бегло посмотрел исходники - такая ситуация корректно не обрабатывается, все что произойдет - будет выведено warning сообщение, но сложно сказать как эту ситуацию корректно обработать - если закончились хэндлы, то что-то очень серьезно пошло не так в приложение или в ОС).
т.е. я бы сказал что эти проблемы - надуманные.

Про исключения - тут несколько факторов
* Qt разрабатывается в том числе для платформ и компиляторов которые не поддерживают исключения
* Включение поддержки исключений вносит дополнительный overhead в сгенерированный код.
* Для корректной обработки исключений в цикле обработки сообщений нужно уметь маршалить исключения, поэтому это оставлено на усмотрение пользователя библиотеки - если это необходимо то всегда можно переопределить notify() и решать что делать с исключением.

в данный момент не все части Qt являются exception safe (например контейнеры и исключения при аллокации памяти), в будущих версиях эта часть будет улучшена.
Записан
shadone
Гость
« Ответ #187 : Июль 19, 2009, 18:15 »

Цитировать
>>Ты удивишся если глянеш на дизайнер для 3 QT. Правда слот там добавлялся в *.h 
Сейчас делается тоже самое, в UI_*.h файле генерируется виртуально-абстрактная функция, которой потом в наследнике ручками нужно прописать реализацию (кажется так). Вот заготовку этой реализации правильно чтобы сгенерировать дизайнер. Сравни количество шагов, которые нужно сделать, чтобы начать заполнять обработчик в дизайнере Delphi и дизайнере Qt. Как в рекламе – разработчики Велобаджи уже давно празднуют, а разработчики Велорибы пишут ручками обработчики на Qt:))

во-первый - не так. во-вторых в Qt Creator это реализовано (если я правильно понимаю то речь о том чтобы перейти к написания кода обработчика события из ui designer, так?). в-третьих - Qt Creator это приложение с открытым исходным кодом и разработчики очень открыты для контрибуций код - милости просим, ваш патч (надлежащего качества) будет принят с удовольствием.

Записан
BigZ
Гость
« Ответ #188 : Июль 19, 2009, 18:53 »

isRunning не атомарный флаг, поэтому определить по какой причини он сброшен представляется проблематичным.
Цитировать
QWidget по-умолчанию не использует платформо-зависимые window handle, поэтому такая ситуация маловероятна.
Qt, насколько я понимаю, использует CreateWindowEx в Windows реализации и XCreateWindow в Linux для создания окон. Если это так, то возникает простая ситуация - Linux, упала сеть. Связь с X-сервером временно потеряна, окна не создаются. Хотелось бы продолжить работу без перезагрузки приложения, когда сеть поднимится. Как обработать?
Цитировать
если закончились хэндлы, то что-то очень серьезно пошло не так в приложение или в ОС).
Если я ни чего не путаю, в Linux можно устанавливать лимиты на колличество запущенные процессов, потоков у пользователя.
Цитировать
во-первый - не так. во-вторых в Qt Creator это реализовано (если я правильно понимаю то речь о том чтобы перейти к написания кода обработчика события из ui designer, так?). в-третьих - Qt Creator это приложение с открытым исходным кодом и разработчики очень открыты для контрибуций код - милости просим, ваш патч (надлежащего качества) будет принят с удовольствием.
Да, правильно. Про это речь.
Видимо вы имеете отношение к разрабоке Qt, хотелось узнать каково видение развития дизайнера по части не визуальных компонент? Почему эта возможность пропала в 4.х?

« Последнее редактирование: Июль 19, 2009, 19:04 от BigZ » Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #189 : Июль 19, 2009, 19:37 »

Цитировать
Видимо вы имеете отношение к разрабоке Qt, хотелось узнать каково видение развития дизайнера по части не визуальных компонент? Почему эта возможность пропала в 4.х?

Да на фиг они нужны то - хоть один реальный пример?

Цитировать
Видимо вы имеете отношение к разрабоке Qt
Если не секрет - что в его словах вас навело на мысль что человек является частью оф. команды троллей? То что креатор открытый и сама Qt не для кого не секрет... Может для вас?
« Последнее редактирование: Июль 19, 2009, 19:39 от break » Записан
BigZ
Гость
« Ответ #190 : Июль 20, 2009, 09:19 »

Да на фиг они нужны то - хоть один реальный пример?
Довольно странный вопрос от человека, который долго программировал в Delphi.

Если не секрет - что в его словах вас навело на мысль что человек является частью оф. команды троллей? То что креатор открытый и сама Qt не для кого не секрет... Может для вас?

Человек написал - "в будущих версиях эта часть будет улучшена.". В подписи указал город Oslo. В соседней ветке разместил ссылку с вакансиями фирмы Qt.

Нет, то что QtCreator открыт для меня не секрет.
« Последнее редактирование: Июль 20, 2009, 09:44 от BigZ » Записан
ufna
Гость
« Ответ #191 : Июль 20, 2009, 09:28 »

Подход "чтоб было" ведет к появлению кучу хрени, которая совсем не нужна и мусорит суть. Давайте еще сделаем так, чтобы при успешной компиляции появлялся розовый зайчик и радостно сообщал, что проект таки собрал! Чтоб было.
Записан
alex12
Гость
« Ответ #192 : Июль 20, 2009, 10:56 »

Подход "чтоб было" ведет к появлению кучу хрени, которая совсем не нужна и мусорит суть. Давайте еще сделаем так, чтобы при успешной компиляции появлялся розовый зайчик и радостно сообщал, что проект таки собрал! Чтоб было.

+100

См. книжку Дизайн и эволюция языка C++
Записан
shadone
Гость
« Ответ #193 : Июль 20, 2009, 11:09 »

isRunning не атомарный флаг, поэтому определить по какой причини он сброшен представляется проблематичным.
Цитировать
QWidget по-умолчанию не использует платформо-зависимые window handle, поэтому такая ситуация маловероятна.
Qt, насколько я понимаю, использует CreateWindowEx в Windows реализации и XCreateWindow в Linux для создания окон. Если это так, то возникает простая ситуация - Linux, упала сеть. Связь с X-сервером временно потеряна, окна не создаются. Хотелось бы продолжить работу без перезагрузки приложения, когда сеть поднимится. Как обработать?
по-умолчанию CreateWindowEx используется только для toplevel окон, все остальные виджеты не используют нативные хэндлы. подробнее.

насчет X11 - если сеть упала и сессия была разорвана, то после восстановления сети протокол больше не поднимется насколько я помню. Это поведение необходимо изменять в самой реализации X-сервера.

Цитировать
если закончились хэндлы, то что-то очень серьезно пошло не так в приложение или в ОС).
Если я ни чего не путаю, в Linux можно устанавливать лимиты на колличество запущенные процессов, потоков у пользователя.
Цитировать
во-первый - не так. во-вторых в Qt Creator это реализовано (если я правильно понимаю то речь о том чтобы перейти к написания кода обработчика события из ui designer, так?). в-третьих - Qt Creator это приложение с открытым исходным кодом и разработчики очень открыты для контрибуций код - милости просим, ваш патч (надлежащего качества) будет принят с удовольствием.
Да, правильно. Про это речь.
Видимо вы имеете отношение к разрабоке Qt, хотелось узнать каково видение развития дизайнера по части не визуальных компонент? Почему эта возможность пропала в 4.х?
не знаю. вероятно пропала и не появилась в Qt 4 потому что не была востребована и пользователи не присылали ни патчи ни feature request для нее.
Записан
BigZ
Гость
« Ответ #194 : Июль 20, 2009, 11:39 »

по-умолчанию CreateWindowEx используется только для toplevel окон, все остальные виджеты не используют нативные хэндлы. подробнее.
Довольно интересно. Не знал об этом. Спасибо за информацию!
насчет X11 - если сеть упала и сессия была разорвана, то после восстановления сети протокол больше не поднимется насколько я помню. Это поведение необходимо изменять в самой реализации X-сервера.

Не факт, что это не измениться в след. версии X. Если же сессия умирает совсем, как вы говорите,
то можно деинициализировать всё X-соединение и заново пытаться установить связь с X-дисплеем, если
речь идёт про стрессоусточивое приложение. Эта фраза уже даже относится не к исключениям, а относится
к механизму обработки ошибок платформы в целом. Удобно такие и другие ошибки обрабатывать исключениями. Очень жаль, что существуют платформы на которых обязана работать Qt и которые не поддерживают исключения.
Другие аргументы (overhead и т.д.) не кажутся такими существенными.


Записан
Страниц: 1 ... 11 12 [13] 14   Вверх
  Печать  
 
Перейти в:  


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