Название: QDialog и затенение окна Отправлено: Termit от Июль 31, 2011, 20:51 Добрый день.
Хочу реализовать затенение главного окна приложения при открытии модального диалога. Не получается ничего нормального. То ничего не происходит, то работает крайне медленно :-( Хотелось бы чтобы работало без лишнего наследования виджетов. Поиск по google и по форуму понимания ситуации не добавил. Делал так. Вроде на форуме было... Код Ничего не происходит... Делал свой QGraphicsEffect в методе draw Код Тормозит со страшной силой. И похоже, что вызывается для каждого объекта на форме Есть ли у кого решение? В какую сторону копать? Название: Re: QDialog и затенение окна Отправлено: SimpleSunny от Июль 31, 2011, 21:20 Может попробовать так
Код
Название: Re: QDialog и затенение окна Отправлено: Termit от Июль 31, 2011, 21:23 Может попробовать так Код
Нет, ну это же не затемнение... Название: Re: QDialog и затенение окна Отправлено: Termit от Август 01, 2011, 00:12 После того как добавил строку
Код вдруг стало быстро работать... Название: Re: QDialog и затенение окна Отправлено: climber от Август 01, 2011, 11:09 Решал подобную задачу. Необходимо было в момент длительного обращения к базе блокировать курвер для отрисовки графиков, с показом прогреса.
Вот как реализовано у меня Код:
Работает шустро. Название: Re: QDialog и затенение окна Отправлено: Termit от Август 01, 2011, 17:51 Решал подобную задачу. Необходимо было в момент длительного обращения к базе блокировать курвер для отрисовки графиков, с показом прогреса. Спасибо, как вернусь из командировки помедитирую. По результатам отпишусь. Название: Re: QDialog и затенение окна Отправлено: trot от Август 01, 2011, 20:32 Создаешь QWidget, распахиваешь его на все свое окно, устанавливаешь прозрачность, а потом вызываешь свой модальный диалог. После закрытия диалога, уничтожаешь виджет. Вот и все.
Название: Re: QDialog и затенение окна Отправлено: Termit от Август 03, 2011, 18:52 Вот как реализовано у меня Спасибо, получилось то, что хотел... to All: Проясните такую ситуацию: для простоты изложения вложил маленький проект, который на коленке собрал из QGraphicsEffect и решения climber. Так вот, если применить напрямую (key 1) эффект на форму где что-то изменяется, то эффект применяется много раз. В коде есть закомментированный костыль. Собственно почему так происходит? Название: Re: QDialog и затенение окна Отправлено: climber от Август 04, 2011, 10:56 Как мне видится это происходит вот почему:
1. В классе GraphicsDarkensEffect переопределена виртуальная функция draw, которая вызывается всякий раз, когда источник перерисовывается. Цитировать This pure virtual function draws the effect and is called whenever the source needs to be drawn. 2. В Вашем случае источником является объект класса Gf, который меняется по таймеру. Соответственно и функция draw получается что вызывается по таймеру.P.S. А зачем понадобилось писать класс наследованный от QGraphicsEffect, если как Вы уже сами попробовали, мой способ проще? =) Название: Re: QDialog и затенение окна Отправлено: Termit от Август 04, 2011, 18:33 Как мне видится это происходит вот почему: Все так и есть. Но ожидалось, что перерисовываться будет каждый раз так сказать "с нуля", а не уже с наложенным эффектом.1. В классе GraphicsDarkensEffect переопределена виртуальная функция draw, которая вызывается всякий раз, когда источник перерисовывается. Цитировать This pure virtual function draws the effect and is called whenever the source needs to be drawn. 2. В Вашем случае источником является объект класса Gf, который меняется по таймеру. Соответственно и функция draw получается что вызывается по таймеру. P.S. А зачем понадобилось писать класс наследованный от QGraphicsEffect, если как Вы уже сами попробовали, мой способ проще? =) Этот класс я писал еще до того как Вы выложили свое решение. Ну а по большому счету, лично для меня кажется более правильным подход с созданием эффекта ;-) PS. В некоторых случаях в Ваше решение тоже затемняется по много раз - если на форме есть QLabel который по таймеру обновляется. |