Russian Qt Forum

Qt => Вопросы новичков => Тема начата: dqrest от Декабрь 04, 2012, 13:58



Название: Почему в конструкторе 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" - хз. Не надо возражать что это, дескать, "непринципиально" - в таком свинарнике до "сути" дело просто не доходит.

Чего Вы ловите (QString &) если испустили (char *)? Это не вызов ф-ции, приводить к QString здесь никто не будет. Если исправить эти ошибки Ваш пример заработает, т.е. пока не высовываетесь из обработки события - использовать exception можно как обычно. Другое дело поймать "выше" не сможете, это нормально т.к. откатить назад посланное событие нельзя

Где я должен переопределить QApplication::notify().
"где" = обычное переопределение виртуального метода. Неясно что делать поймав - ну то Вам виднее   
Я привел общую схему. Не буду же я выкладывать все catch(type)!!!Смысл???А Вы прежде чем меня критиковать хотя бы код простой набрали бы и проверили!!!


Название: 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
Спасибо за помощь!!!