Название: Вылет на exec() в QFileDialog Отправлено: n2o от Апрель 03, 2011, 20:50 Пишу текстовый редактор с возможностью работы с несколькими документами.
Когда открыто хоть одно текстовое поле QTextEdit и я вызываю окно QFileDialog, то всё нормально открывается. Но когда я закрываю все текстовые поля, то есть на экране нет поля ввода и я вызываю QFileDialog, то программа вылетает, и даже диалоговое окно не появляется, и вылетает она на слоте exec(), который выводит окно на экран. Пробовал заменить статической функцией QFileDialog::getOpenFileName, но такая же ерунда, вылетает на этой функции. Но если хоть одно текстовое поле открыто, то всё в норме. Код: QFileDialog dialog(this); То что находится в if (dialog.exec()) {...} верно 100%, стопорит именно на этом слоте. Либо если меняю всё это на функцию QFileDialog::getOpenFileName то стопорит на ней даже не открывая окна. Название: Re: Вылет на exec() в QFileDialog Отправлено: blood_shadow от Апрель 04, 2011, 11:02 То что находится в if (dialog.exec()) {...} верно 100%, стопорит именно на этом слоте. Либо если меняю всё это на функцию QFileDialog::getOpenFileName то стопорит на ней даже не открывая окна. как по мне так эти 2 диалоговых окна могут вылетать только из-за порченого указателя this, больше просто нет из-за чего, проверьте этот указатель, попробуйте с помощью его что-то сделать при закрытых эдитах Название: Re: Вылет на exec() в QFileDialog Отправлено: Fess от Апрель 04, 2011, 11:49 Вероятно, проблема не с QFileDialog :)
Просто вы неаккуратно работаете с памятью, а в момент вызова диалога это проявляется. Из приведенного примера совершенно не ясно что это может вызывать. К примеру, QTextEdit *tmpDoc = new QTextEdit; у вас где-то освобождаются эти указатели? Вы не используете их после удаления? Название: Re: Вылет на exec() в QFileDialog Отправлено: n2o от Апрель 04, 2011, 15:00 в программе я создаю QTextEdit *tmpDoc = new QTextEdit;
но при закрытии документа я освобождаю память и удаляю его. и делаю так со всем что создавал. проверял несколько раз, вряд ли что-то мог упустить. Теперь я выяснил следующее: у меня есть массив объектов QTextEdit и когда я его очищаю полностью тогда и глюк с exec(). Пробовал перед очищением освобождать память, но без изменений. Но если хоть один объект оставляю в этом массиве, то всё работает нормально. Проблему решил хитрым способом: просто не стал удалять последний оставшийся элемент массива, просто убрал с экрана его, и при открытии нового документа, если ни один документ не открыт, то я первый элемент перезаписываю. Это называется через одно место, но другого выхода не нашёл. Название: Re: Вылет на exec() в QFileDialog Отправлено: Пантер от Апрель 04, 2011, 15:04 Что-то у тебя совсем все плохо. Давай код сюда.
Название: Re: Вылет на exec() в QFileDialog Отправлено: n2o от Апрель 04, 2011, 15:17 Да ладно, кода много, и он запутанный, замучаешься только разбираться, время потратишь много.
Это мне весь код проги надо кидать чтоб вы смогли отследить всё необходимое. Много глобальных массивов и переменных. 800 строк. Ладно, так работает да и ладно, только несколько десятков строк лишних. Название: Re: Вылет на exec() в QFileDialog Отправлено: Пантер от Апрель 04, 2011, 15:21 Пересмотри архитектуру, она неправильная.
Название: Re: Вылет на exec() в QFileDialog Отправлено: Fess от Апрель 04, 2011, 18:18 как вариант - деление на 0 - если количество элементов в массиве используется для вычисления чего-либо..
вообще, посади уже проблемный код в try catch и отлови исключения. |