Название: QProgressDialog , processEvents и QThread Отправлено: polina89 от Декабрь 11, 2013, 14:43 Здравствуйте!
У меня имеется QProgressDialog, который описывает состояние процесса, идущего в отдельном потоке.При нажатии Cancel пользователю выдается сообщение, действительно ли он хочет остановить процесс. ProgressDialog является немодальным. Все работает как нужно, но после появления QMessageBox по каким-то причинам QProgressDialog вылезает вперед QMessageBox(загораживает его, другими словами).Как это убрать? Это код запуска отдельного потока Код: QProgressDialog *ProgressDialog=new QProgressDialog(QObject::trUtf8("Идет экспорт справочников"),QObject::trUtf8("Отмена"),0,100, this); Код: while ((query.next())&&(stopped)) Название: Re: QProgressDialog , processEvents и QThread Отправлено: Hrundel от Декабрь 11, 2013, 15:37 Наверное QMessageBox нужно в каком-нибудь модусе запускать. Типа information(), warning(), или critical().
Тогда он будет на себе фокус удерживать. А так фокус сразу перехватывает QProgressDialog. Название: Re: QProgressDialog , processEvents и QThread Отправлено: Bepec от Декабрь 11, 2013, 16:10 Модальность задавайте. Проще говоря в конструкторе укажите ProgressDialog в качестве родителя. А вылезает по той причине, что вы его наверняка с потока обновляете, вот он и лезет.
Название: Re: QProgressDialog , processEvents и QThread Отправлено: polina89 от Декабрь 11, 2013, 16:41 Не очень поняла про модальность.Ведь все окна класса QMessageBox уже по умолчанию модальны. Разве нет? :)
Название: Re: QProgressDialog , processEvents и QThread Отправлено: Bepec от Декабрь 11, 2013, 19:48 Если им родителя не указать, они не модальны вроде.
Название: Re: QProgressDialog , processEvents и QThread Отправлено: polina89 от Декабрь 12, 2013, 08:20 Родителем в моем случае является MainWindow. И QMessageBox является модальным сообщением, так как не дает мне работать, пока я его не закрою.Но это не спасло от того, что ProgressDialog вылезает вперед.Вот код для сообщения :)
Код: QMessageBox* msgBox = new QMessageBox( this ); Название: Re: QProgressDialog , processEvents и QThread Отправлено: Hrundel от Декабрь 12, 2013, 10:25 Попробуй так:
Код
Название: Re: QProgressDialog , processEvents и QThread Отправлено: Igors от Декабрь 12, 2013, 11:04 А по-народному сделать ProgressDialog->hide() перед показом QMessageBox? Это и по прынцыпам UI правильно
Название: Re: QProgressDialog , processEvents и QThread Отправлено: polina89 от Декабрь 12, 2013, 11:26 К сожалению, ни то, ни другое не помогло.Возможно, это из-за того, что из другого потока посылается сигнал о ходе процесса, который привязан к слоту setValue у ProgressDialog. Но разве при каждом setValue ProgressDialog заново отрисовывается?? и причем еще так, что каким-то образом перекрывает модальное окно ??? ??? ???
Название: Re: QProgressDialog , processEvents и QThread Отправлено: Hrundel от Декабрь 12, 2013, 11:35 А может у тебя сам ProgressDialog модальный? Попробуй ему явно указать чтобы не был.
Код
Код
Название: Re: QProgressDialog , processEvents и QThread Отправлено: polina89 от Декабрь 12, 2013, 12:17 Не помогло. :-\ Причем когда ProgressDialog вылезает вперед мне недоступна кнопка "Отмена", так как она блокируется модальным QMessageBox. Но почему тогда этот Dialog лезет вперед, я ума не приложу.
Название: Re: QProgressDialog , processEvents и QThread Отправлено: Dima от Декабрь 12, 2013, 12:34 сделайте ProgressDialog родителем для месседжа
Название: Re: QProgressDialog , processEvents и QThread Отправлено: Hrundel от Декабрь 12, 2013, 14:41 Да делала она уже.
Просто процесс всегда фокус перехватывает. Не понятно как-то. Наверное, тебе придется больше кода показать, а то теперь совсем трудно понять в чем проблемма. Название: Re: QProgressDialog , processEvents и QThread Отправлено: polina89 от Декабрь 12, 2013, 14:57 Спасибо всем большое за помощь!=)Получилось сделать с родителем)Изначально не вышло, потому что там был еще мой собственный косяк, точнее недочет)Так что теперь все гуд.Спасибо!!! :D :D :D :D :D
|