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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Почему в конструкторе QMAinWindow нельзя обрабатывать исключения  (Прочитано 4036 раз)
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(). И как из-вне я могу ловить ошибки, допустим, если в качестве апарметра пришло что-то, меня оно не устраивает и я кидаю ошибку?Непонимающий
Записан
Bepec
Гость
« Ответ #1 : Декабрь 04, 2012, 14:30 »

По вопросу ничего сказать не могу.

Задам свой вопрос - а зачем вам исключения кидать?
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Декабрь 04, 2012, 14:57 »

Код не оформлен в виде тега, "p" не объявлено, кто такие "thrown" и "QMAinWindow" - хз. Не надо возражать что это, дескать, "непринципиально" - в таком свинарнике до "сути" дело просто не доходит.

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

Где я должен переопределить QApplication::notify().
"где" = обычное переопределение виртуального метода. Неясно что делать поймав - ну то Вам виднее   
Записан
dqrest
Гость
« Ответ #3 : Декабрь 04, 2012, 15:02 »

По вопросу ничего сказать не могу.

Задам свой вопрос - а зачем вам исключения кидать?
допустим, в конструкторе есть параметр DataBase *db. К нам пришло соединение с mysql, которое мы проверяем и оно отвалилось. Мы кидаем throw на восстановление соединения и пытаемся уже с восстановившимся соединением создать окно заново. Или пытаемся создать виджеты, а на них не выделилась память. Я просто хочу познакомиться с try catch и qt. ТОгда где нужно переопределить QApplication::notify() Непонимающий
Записан
dqrest
Гость
« Ответ #4 : Декабрь 04, 2012, 15:06 »

Код не оформлен в виде тега, "p" не объявлено, кто такие "thrown" и "QMAinWindow" - хз. Не надо возражать что это, дескать, "непринципиально" - в таком свинарнике до "сути" дело просто не доходит.

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

Где я должен переопределить QApplication::notify().
"где" = обычное переопределение виртуального метода. Неясно что делать поймав - ну то Вам виднее   
Я привел общую схему. Не буду же я выкладывать все catch(type)!!!Смысл???А Вы прежде чем меня критиковать хотя бы код простой набрали бы и проверили!!!
Записан
dqrest
Гость
« Ответ #5 : Декабрь 04, 2012, 15:09 »

"где" = обычное переопределение виртуального метода. Неясно что делать поймав - ну то Вам виднее   
Где= Я main.cpp есть переменная QApplication app(argc, argv); Есть ли смысл все catch туда выкладывать????Вот я и спрашиваю, "где"!!!!
Записан
Bepec
Гость
« Ответ #6 : Декабрь 04, 2012, 15:12 »

dqrest - выложите или нормальный компилируемый код, либо зазипуйте и приложите к сообщению.

Тот ваш "БРЕД", что вы написали не имеет никакого отношения к программированию. "Все совпадения случайны" ©

Записан
dqrest
Гость
« Ответ #7 : Декабрь 04, 2012, 15:24 »

dqrest - выложите или нормальный компилируемый код, либо зазипуйте и приложите к сообщению.

Тот ваш "БРЕД", что вы написали не имеет никакого отношения к программированию. "Все совпадения случайны" ©


Разобрался, ошибка была в том, что вместо catch(QString &str) лучше ставить catch(char *str). Видать  тяжело  преобразовать из char* в QString!!!
Записан
dqrest
Гость
« Ответ #8 : Декабрь 04, 2012, 15:24 »

Спасибо за помощь!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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