Название: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения Отправлено: dqrest от Декабрь 04, 2012, 13:58 Вот написал код конструтора
ChildWindow::ChildWindow(QWidget *par) : QMAinWindow(par) { try { p = NULL; if(p == NULL) thrown "error"; } catch(QString &str) { //ошибка } } Запускаю прогу, после этого выкидывается ошибка Qt has caught an exception thrown from event handler/ Throwing exceptions from an event handler is not sopported in Qt. You must reimplement QApplication::notify() and catch all exceptions there. Где я должен переопределить QApplication::notify(). И как из-вне я могу ловить ошибки, допустим, если в качестве апарметра пришло что-то, меня оно не устраивает и я кидаю ошибку???? Название: Re: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения Отправлено: Bepec от Декабрь 04, 2012, 14:30 По вопросу ничего сказать не могу.
Задам свой вопрос - а зачем вам исключения кидать? Название: Re: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения Отправлено: Igors от Декабрь 04, 2012, 14:57 Код не оформлен в виде тега, "p" не объявлено, кто такие "thrown" и "QMAinWindow" - хз. Не надо возражать что это, дескать, "непринципиально" - в таком свинарнике до "сути" дело просто не доходит.
Чего Вы ловите (QString &) если испустили (char *)? Это не вызов ф-ции, приводить к QString здесь никто не будет. Если исправить эти ошибки Ваш пример заработает, т.е. пока не высовываетесь из обработки события - использовать exception можно как обычно. Другое дело поймать "выше" не сможете, это нормально т.к. откатить назад посланное событие нельзя Где я должен переопределить QApplication::notify(). "где" = обычное переопределение виртуального метода. Неясно что делать поймав - ну то Вам виднее Название: Re: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения Отправлено: dqrest от Декабрь 04, 2012, 15:02 По вопросу ничего сказать не могу. допустим, в конструкторе есть параметр DataBase *db. К нам пришло соединение с mysql, которое мы проверяем и оно отвалилось. Мы кидаем throw на восстановление соединения и пытаемся уже с восстановившимся соединением создать окно заново. Или пытаемся создать виджеты, а на них не выделилась память. Я просто хочу познакомиться с try catch и qt. ТОгда где нужно переопределить QApplication::notify() ???Задам свой вопрос - а зачем вам исключения кидать? Название: Re: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения Отправлено: dqrest от Декабрь 04, 2012, 15:06 Код не оформлен в виде тега, "p" не объявлено, кто такие "thrown" и "QMAinWindow" - хз. Не надо возражать что это, дескать, "непринципиально" - в таком свинарнике до "сути" дело просто не доходит. Я привел общую схему. Не буду же я выкладывать все catch(type)!!!Смысл???А Вы прежде чем меня критиковать хотя бы код простой набрали бы и проверили!!!Чего Вы ловите (QString &) если испустили (char *)? Это не вызов ф-ции, приводить к QString здесь никто не будет. Если исправить эти ошибки Ваш пример заработает, т.е. пока не высовываетесь из обработки события - использовать exception можно как обычно. Другое дело поймать "выше" не сможете, это нормально т.к. откатить назад посланное событие нельзя Где я должен переопределить QApplication::notify(). "где" = обычное переопределение виртуального метода. Неясно что делать поймав - ну то Вам виднее Название: Re: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения Отправлено: dqrest от Декабрь 04, 2012, 15:09 "где" = обычное переопределение виртуального метода. Неясно что делать поймав - ну то Вам виднее Где= Я main.cpp есть переменная QApplication app(argc, argv); Есть ли смысл все catch туда выкладывать????Вот я и спрашиваю, "где"!!!!Название: Re: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения Отправлено: Bepec от Декабрь 04, 2012, 15:12 dqrest - выложите или нормальный компилируемый код, либо зазипуйте и приложите к сообщению.
Тот ваш "БРЕД", что вы написали не имеет никакого отношения к программированию. "Все совпадения случайны" © Название: Re: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения Отправлено: dqrest от Декабрь 04, 2012, 15:24 dqrest - выложите или нормальный компилируемый код, либо зазипуйте и приложите к сообщению. Разобрался, ошибка была в том, что вместо catch(QString &str) лучше ставить catch(char *str). Видать тяжело преобразовать из char* в QString!!!Тот ваш "БРЕД", что вы написали не имеет никакого отношения к программированию. "Все совпадения случайны" © Название: Re: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения Отправлено: dqrest от Декабрь 04, 2012, 15:24 Спасибо за помощь!!!
|