Название: Исключения в QT Отправлено: avpog от Сентябрь 24, 2007, 13:34 Всем привет!
Совсем недавно занимаюсь QT, а посему вопрос может несколько ламерский. Подскажите пожалуйста, как в QT применять обработку программных исключений? Если можно, маенький пример. По поиску прошелся, пару тем нашел, но низкоинформативных. В литературе по QT тоже не обнаружил к сожалению. Спасибо. Название: Re: Исключения в QT Отправлено: Вячеслав от Сентябрь 24, 2007, 16:29 сама QT не использует исключения (exceptions) ... А в своей программе - как обычно ;)
try {} catch(...) {} ;) Название: Re: Исключения в QT Отправлено: pastor от Сентябрь 24, 2007, 18:25 2 Вячеслав:
Qt 3.х действительно не использует exceptions, но Qt 4.x использует их. Из своего горького опыта добавлю, что не рекомендуеться конфигурировать Qt 4 БЕЗ поддержки exeptions (флаг -no-exceptions) Название: Re: Исключения в QT Отправлено: Пантер от Сентябрь 24, 2007, 18:34 А что будет? Я всегда конфигурирую с -no-exceptions и пока ничего странного не происходило, а то, что происходило, только из-за кривых руг и прямых извилин. :)
Название: Re: Исключения в QT Отправлено: pastor от Сентябрь 24, 2007, 18:46 А что будет? Я всегда конфигурирую с -no-exceptions и пока ничего странного не происходило, а то, что происходило, только из-за кривых руг и прямых извилин. :) Работали как-то мы над одним проектом... У меня и у напарника Qt была сконфигурирована без их поддержки, у кустомера - с поддержкой. Так вот, когда началась отладка приложения, у кусомера прога падала, у нас нет. После пересборки Qt с флагом -exceptions нам удалось отловить краш. Баг в проекте реально был! С флагом -no-exceptions Qt маскировала эту проблему. А это не есть гуд! Название: Re: Исключения в QT Отправлено: Пантер от Сентябрь 24, 2007, 18:48 Век живи - век учись. ;)
Пошел переконфигурировать кутю. :) Название: Re: Исключения в QT Отправлено: avpog от Сентябрь 24, 2007, 19:08 ОК, спасибо всем. Очень хорошее обсуждение получилось, как-то по местам все расставилось. Буду пробовать. :)
Название: Re: Исключения в QT Отправлено: Вячеслав от Сентябрь 24, 2007, 19:13 2 Вячеслав: А можно пальцем показать _где_ QT использует exceptionы? Я нашел только конструкции видаQt 3.х действительно не использует exceptions, но Qt 4.x использует их. Из своего горького опыта добавлю, что не рекомендуеться конфигурировать Qt 4 БЕЗ поддержки exeptions (флаг -no-exceptions) try{}catch(...){ throw;} IMHO это не использует , а обрабатывает ... Название: Re: Исключения в QT Отправлено: pastor от Сентябрь 24, 2007, 19:54 Спасибо за паправку. Это я и имелл ввиду. Библиотека Qt 4 не генерирует (throw) исключения, а лишь их обрабатывает. Думаю так будет всем понятно :)
Название: Re: Исключения в QT Отправлено: Danila_Bagrofff от Август 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? Может, есть какой-то мануал, но что-то не нашел... Название: Re: Исключения в QT Отправлено: lit-uriy от Август 22, 2011, 11:52 >>Насколько понял есть эксепшены кутишные и есть плюсовые.
Этот ты из предыдущего поста понял? ...Библиотека Qt 4 не генерирует (throw) исключения, а лишь их обрабатывает. Думаю так будет всем понятно :) Название: Re: Исключения в QT Отправлено: Danila_Bagrofff от Август 22, 2011, 12:09 угумс...
понял, почему я не нашел про экспешны.. они в в QTConcurent находятся... нашел доку... http://doc.crossplatform.ru/qt/4.7.x/qtconcurrent-exception.html#details Это для других, на всякий. Сейчас пробую прикрутить.. Хотя никак не пойму, отрабатываются ли экспешны такого формата: Код: void MyClass::myFunc() Сейчас еще попробую кутэшный подставить класс, только не вижу, что он может дать особенного?... Вот вопрос, будут ли генериться какие-то исключения, если где-то как-то не так обрабатывается. В моем случае через потоки обновляются модели. В основном используются кутешные объекты. Исключения они будут выдавать только в случае, если кути была собрана с флагом -exeptions? Иначе исключения отлавливать и смысла нет? Название: Re: Исключения в QT Отправлено: Prm от Август 23, 2011, 13:31 Еще отлов исключений зависит от используемого MinGW. Он должен быть собран с ключом --enable-sjlj-exceptions. Я использую http://tdm-gcc.tdragon.net/ (http://tdm-gcc.tdragon.net/).
Раньше тож вопрос про исключения поднимал: http://www.prog.org.ru/topic_16956_0.html (http://www.prog.org.ru/topic_16956_0.html) Название: Re: Исключения в QT Отправлено: niXman от Август 28, 2011, 02:17 Еще отлов исключений зависит от используемого MinGW. Он должен быть собран с ключом --enable-sjlj-exceptions. Я использую наглая ложьиспользуйте http://code.google.com/p/mingw-builds/downloads/list Название: Re: Исключения в QT Отправлено: Prm от Август 30, 2011, 20:52 наглая ложь используйте http://code.google.com/p/mingw-builds/downloads/list Во-первых, выбирай выражения. Во-вторых, удосужился бы посмотреть с какими флагами собран gcc в предлагаемом для скачивания архиве! Название: Re: Исключения в QT Отправлено: niXman от Август 31, 2011, 05:30 Цитировать Во-первых, выбирай выражения. насрать ;)Цитировать Во-вторых, удосужился бы посмотреть с какими флагами собран gcc в предлагаемом для скачивания архиве! во первых - снова лжешь!во вторых - кликаешь на любой архив и списка, и смотришь опции configure. в третьих - исключения обрабатываются вне зависимости от этих ключей. в четвертых - для чего пустозвонишь? Название: Re: Исключения в QT Отправлено: Prm от Август 31, 2011, 07:22 во вторых - кликаешь на любой архив и списка, и смотришь опции configure. Кликаю в архив http://code.google.com/p/mingw-builds/downloads/detail?name=mingw32-gcc-4.6.2-prerelease-20110826.7z&can=2&q= (http://code.google.com/p/mingw-builds/downloads/detail?name=mingw32-gcc-4.6.2-prerelease-20110826.7z&can=2&q=) - вижу ключ --enable-sjlj-exceptions. в третьих - исключения обрабатываются вне зависимости от этих ключей. Ну так собери свою сборку без этого ключа и скомпилируй тестовый пример для винды(выкладывал на форуме). Докажи, что я лгу. Название: Re: Исключения в QT Отправлено: niXman от Август 31, 2011, 09:22 Цитировать Кликаю в архив http://code.google.com/p/mingw-builds/downloads/detail?name=mingw32-gcc-4.6.2-prerelease-20110826.7z&can=2&q= - вижу ключ --enable-sjlj-exceptions. еще бы. я его вписывал ;)Цитировать Докажи, что я лгу гугление по теме, и чтение манов тебе докажет то, чего ты сам не понял. я-то все доказал.Название: Re: Исключения в QT Отправлено: navrocky от Август 31, 2011, 10:06 не понимаю из-за чего весь сыр-бор. в линуксах с гоцаце и в винде при использовании sdk (msvc, mingw) у меня исключения работают из коробки как полагается.
Название: Re: Исключения в QT Отправлено: niXman от Август 31, 2011, 13:01 сыр-бор из-за того, что товарысчь Prm не понимает, что исключения это языковое средство. так же, не понимает, что нельзя собрать с++ компилятор без поддержки исключений. и не понимает смысл ключа --enable-sjlj-exceptions. но зато пустозвонит за троих.
Название: Re: Исключения в QT Отправлено: navrocky от Август 31, 2011, 23:35 А если по теме, то для того чтобы обрабатывать исключения в гуёвой кутэшной программе, надо оверрайднуть метод QApplication::notify.
Код
|