Russian Qt Forum

Qt => Model-View (MV) => Тема начата: AntonH851 от Июль 23, 2010, 08:40



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


Название: Re: Проблема с вызовом диалоговых окон в делегате
Отправлено: SABROG от Июль 23, 2010, 09:00
Думаю возможно. Тебе нужно лишь выложить на форум исходники, чтобы понять что ты делаешь не так.


Название: Re: Проблема с вызовом диалоговых окон в деле
Отправлено: AntonH851 от Июль 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() то опять программа завершается аварийно....
а мне то нужно чтоб выполнение остановилось пока диалог не закрыт




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

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


Название: Re: Проблема с вызовом диалоговых окон в делегате
Отправлено: AntonH851 от Июль 26, 2010, 11:06
Проблема была решена путем вызова диалога не в делегате а в виджете, используемом в качестве редактора для делагата, т.е. до того как будет вызван setModelData()