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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Исключения в QT  (Прочитано 28503 раз)
avpog
Гость
« : Сентябрь 24, 2007, 13:34 »

Всем привет!
Совсем недавно занимаюсь QT, а посему вопрос может несколько ламерский.
Подскажите пожалуйста, как в QT применять обработку программных исключений?
Если можно, маенький пример.
По поиску прошелся, пару тем нашел, но низкоинформативных.
В литературе по QT тоже не обнаружил к сожалению.
Спасибо.
Записан
Вячеслав
Гость
« Ответ #1 : Сентябрь 24, 2007, 16:29 »

сама QT не использует исключения (exceptions) ... А в своей программе - как обычно Подмигивающий

try {} catch(...) {} Подмигивающий
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Сентябрь 24, 2007, 18:25 »

2 Вячеслав:

Qt 3.х действительно не использует exceptions, но Qt 4.x использует их. Из своего горького опыта добавлю, что не рекомендуеться конфигурировать Qt 4 БЕЗ поддержки exeptions (флаг  -no-exceptions)
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #3 : Сентябрь 24, 2007, 18:34 »

А что будет? Я всегда конфигурирую с -no-exceptions и пока ничего странного не происходило, а то, что происходило, только из-за кривых руг и прямых извилин. Улыбающийся
Записан

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

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Сентябрь 24, 2007, 18:46 »

А что будет? Я всегда конфигурирую с -no-exceptions и пока ничего странного не происходило, а то, что происходило, только из-за кривых руг и прямых извилин. Улыбающийся

Работали как-то мы над одним проектом... У меня и у напарника Qt была сконфигурирована без их поддержки, у кустомера - с поддержкой. Так вот, когда началась отладка приложения, у кусомера прога падала, у нас нет. После пересборки Qt с флагом -exceptions нам удалось отловить краш. Баг в проекте реально был! С флагом -no-exceptions Qt маскировала эту проблему. А это не есть гуд!
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #5 : Сентябрь 24, 2007, 18:48 »

Век живи - век учись. Подмигивающий
Пошел переконфигурировать кутю. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
avpog
Гость
« Ответ #6 : Сентябрь 24, 2007, 19:08 »

ОК, спасибо всем. Очень хорошее обсуждение получилось, как-то по местам все расставилось. Буду пробовать.  Улыбающийся
Записан
Вячеслав
Гость
« Ответ #7 : Сентябрь 24, 2007, 19:13 »

2 Вячеслав:

Qt 3.х действительно не использует exceptions, но Qt 4.x использует их. Из своего горького опыта добавлю, что не рекомендуеться конфигурировать Qt 4 БЕЗ поддержки exeptions (флаг  -no-exceptions)
А можно пальцем показать _где_ QT использует exceptionы? Я нашел только конструкции вида
try{}catch(...){ throw;} IMHO это не использует , а обрабатывает ...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Сентябрь 24, 2007, 19:54 »

Спасибо за паправку. Это я и имелл ввиду. Библиотека Qt 4 не генерирует (throw) исключения, а лишь их обрабатывает. Думаю так будет всем понятно Улыбающийся
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Danila_Bagrofff
Гость
« Ответ #9 : Август 22, 2011, 11:13 »

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

В кэш.файле про эксепшены ни слова. Это значит, они не активированы? Или по умолчанию они все-таки есть?
Цитировать
-debug-and-release
-confirm-license
-plugin-sql-sqlite
-plugin-sql-odbc
-qt-libpng
-qt-libjpeg
-openssl
-opensource
-no-incredibuild-xge
-dont-process

Что и как пересобрать, если все-таки надо активировать. Или можно обойтись и плюсовыми эксепшнами?
Что надо инклюдить, чтобы использовать плюсовый exeption?
Может, есть какой-то мануал, но что-то не нашел...
« Последнее редактирование: Август 22, 2011, 11:28 от Danila_Bagrofff » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #10 : Август 22, 2011, 11:52 »

>>Насколько понял есть эксепшены кутишные и есть плюсовые.
Этот ты из предыдущего поста понял?
...Библиотека Qt 4 не генерирует (throw) исключения, а лишь их обрабатывает. Думаю так будет всем понятно Улыбающийся

Записан

Юра.
Danila_Bagrofff
Гость
« Ответ #11 : Август 22, 2011, 12:09 »

угумс...

понял, почему я не нашел про экспешны.. они в в QTConcurent находятся...

нашел доку...

http://doc.crossplatform.ru/qt/4.7.x/qtconcurrent-exception.html#details

Это для других, на всякий. Сейчас пробую прикрутить..

Хотя никак не пойму, отрабатываются ли экспешны такого формата:

Код:
void MyClass::myFunc()
{
try{
//здесь что-то там делается
}
catch(...) {
//здесь что-то должно делаться в случае ошибок
}

}

Сейчас еще попробую кутэшный подставить класс, только не вижу, что он может дать особенного?...

Вот вопрос, будут ли генериться какие-то исключения, если где-то как-то не так обрабатывается. В моем случае через потоки обновляются модели. В основном используются кутешные объекты. Исключения они будут выдавать только в случае, если кути была собрана с флагом -exeptions?
Иначе исключения отлавливать и смысла нет?
« Последнее редактирование: Август 22, 2011, 12:36 от Danila_Bagrofff » Записан
Prm
Гость
« Ответ #12 : Август 23, 2011, 13:31 »

Еще отлов исключений зависит от используемого MinGW. Он должен быть собран с ключом --enable-sjlj-exceptions. Я использую http://tdm-gcc.tdragon.net/.

Раньше тож вопрос про исключения поднимал: http://www.prog.org.ru/topic_16956_0.html
Записан
niXman
Гость
« Ответ #13 : Август 28, 2011, 02:17 »

Еще отлов исключений зависит от используемого MinGW. Он должен быть собран с ключом --enable-sjlj-exceptions. Я использую
наглая ложь

используйте http://code.google.com/p/mingw-builds/downloads/list
Записан
Prm
Гость
« Ответ #14 : Август 30, 2011, 20:52 »

наглая ложь

используйте http://code.google.com/p/mingw-builds/downloads/list

Во-первых, выбирай выражения. Во-вторых, удосужился бы посмотреть с какими флагами собран gcc в предлагаемом для скачивания архиве!
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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