MyTetra Share
Делитесь знаниями!
Почему в Qt не работает мигание окном при вызове QApplication::alert()
Время создания: 18.09.2020 08:44
Текстовые метки: qt, QApplication, qApp, alert, QWidget, не работает, мигание, окно
Раздел: Компьютер - Программирование - Язык C++ - Библиотека Qt - Принципы написания кода

Если в приложении есть виджеты, которые отображаются в виде отдельного окна, то в Qt есть возможность дать команду привлечения внимания пользователя к такому окну. Делается это с помощью вызова:



QApplication::alert(QWidget *widget, int msec = 0)


Causes an alert to be shown for widget if the window is not the active window. The alert is shown for msec miliseconds. If msec is zero (the default), then the alert is shown indefinitely until the window becomes active again.


Вольный перевод: Метод alert() вызывает отображение предупреждения для окна виджета, если окно не является активным. Предупреждение отображается указанное количество миллисекунд. Если параметр msec равен нулю (по умолчанию), тогда предупреждение будет работать бесконечно, пока окно не станет активным.



В разных оконных средах и на разных операционных системах привлечение внимания к окну происходит разными способами. Например, в Windows и в Linux KDE окно виджета должно мигать.


Однако, в реальном проекте можно столкнуться с ситуацией, когда данный вызов не будет приводить к миганию окна виджета. Документация не проливает свет на эту проблему. Так в чем может быть дело?


Дело оказывается в том, что привлечение внимания к окну зависит от того, имеет ли виджет родителя или нет. Если при создании виджета первым параметром конструктора был указан родитель, или в процессе работы программы виджету был установлен родитель через метод setParent(), то такое окно виджета мигать не будет.


Мигать будет только "открепленное" окно виджета, у которого не указан родитель.


UPD: Возможно, дело не просто в наличии/отсутствии родителя, а в том, какое окно было активно в момент вызова метода qApp->alert(...). Если, например, было активно главное окно программы, а команда привлечения внимания была сделана на окно виджета, у которого главное окно программы является родителем, то окно виджета мигать не будет. Это нужно отдельно проверить.


Так же в этом разделе:
 
MyTetra Share v.0.53
Яндекс индекс цитирования