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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с вызовом диалоговых окон в делегате  (Прочитано 3053 раз)
AntonH851
Гость
« : Июль 23, 2010, 08:40 »

Здравствуйте!
При сохранении данных в модели (setModelData) мне нужно при невыполнении некоторых условий выдать MessageBox. Сообщение вылетает, но при его закрытии происходит "крах" приложения. Причем на строчке метода installEventFilter в файле qobject.cpp. Пробовал указывать родителя для диалога и просто 0 ставил, результат одни и тот же
Неужели нельзя диалоги из делегата выдавать? пробовал в другом делегате использовать QInputDialog тоже самое....
Есть ли способ как-то это обойти или исправить?
Записан
SABROG
Гость
« Ответ #1 : Июль 23, 2010, 09:00 »

Думаю возможно. Тебе нужно лишь выложить на форум исходники, чтобы понять что ты делаешь не так.
Записан
AntonH851
Гость
« Ответ #2 : Июль 23, 2010, 10:40 »

если это что то объяснит, то вот строки вызова сообщения:
Код:
        QMessageBox::critical(0,
                 "Ошибка!",
                 "Вагона с номером " + QString::number(value) +
                 " в базе не обнаружено!",
                 QMessageBox::Ok);

А вот так работает:
Код:
     QMessageBox *mb = new QMessageBox;
        mb->setWindowTitle("Ошибка!");
        mb->setText("Вагона с номером " + QString::number(value) + " в базе не обнаружено!");
        mb->setStandardButtons(QMessageBox::Ok);
        mb->setIcon(QMessageBox::Critical);
        mb->show();

Но если вместо show() написать exec() то опять программа завершается аварийно....
а мне то нужно чтоб выполнение остановилось пока диалог не закрыт


« Последнее редактирование: Июль 23, 2010, 10:55 от AntonH851 » Записан
BRE
Гость
« Ответ #3 : Июль 23, 2010, 11:08 »

Предположу.
Делегат отслеживает изменения в view, устанавливая фильтр событий.
Скорее всего происходит следующее: из обработчика фильтра событий вызывается метод твоего делегата в котором ты пытаешься крутить эту очередь дальше (вызываешь exec()), это и приводит в краху.

Но если вместо show() написать exec() то опять программа завершается аварийно....
а мне то нужно чтоб выполнение остановилось пока диалог не закрыт
Скорее всего придется вынести этот функционал из делегата.
Записан
AntonH851
Гость
« Ответ #4 : Июль 26, 2010, 11:06 »

Проблема была решена путем вызова диалога не в делегате а в виджете, используемом в качестве редактора для делагата, т.е. до того как будет вызван setModelData()
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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