Qt правильный способ отображения / отображения / повышения окна

#c #qt #pyqt4

#c #qt #pyqt4

Вопрос:

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

 widget->raise();
widget->activateWindow();
widget->showNormal();
  

Начинает казаться, что мне не хватает функции быстрого доступа. Конечно, такое поведение довольно распространено. Есть ли какая-то предпочтительная функция, которая будет выполнять все вышеперечисленное и / или просто делать правильные вещи в каждой целевой ОС?


Примечание: я только что заметил дефект, поэтому специальная функция сейчас еще важнее. Если окно свернуто, activateWindow не работает. Это происходит, даже если вы измените порядок выше на showNormal первый.

Комментарии:

1. Да, я много просматривал документы. Каждая ОС делает что-то немного другое, поэтому мне нужно несколько вызовов. В данном случае мое приложение является текущим окном верхнего уровня, поэтому оно обычно работает.

2. Звучит как ошибка, она отлично работает для меня в PySide. Сложно оценить без SSCCE, который воспроизводит проблему.

3. Действительно, это похоже на ошибку, activateWindow() которая работает и для меня. Можете ли вы протестировать это с более новой версией Qt (скажем, 5.6 или 5.7)?

Ответ №1:

это рабочий «ярлык» :

 widget->setWindowState(Qt::WindowActive) ;
  

Вы можете связать его с последним Qt::WindowState окном.
Однако это обозначение не очень явное.

Комментарии:

1. К сожалению, raise() , showNormal() — они оба не сработали для меня. Но setWindowState(Qt::WindowActive) отлично работает в моем случае. Спасибо…

2. Странно … это не работает для меня, но activateWindow() работает. Может быть, это было исправлено в Qt 5.7?

Ответ №2:

Нет необходимости в таком усложнении. Этого достаточно :

 widget->raise();
widget->show();
  

Кстати, вы можете вызвать show() один раз, и если вы hide() этого не сделаете, нет необходимости вызывать show() снова.

Комментарии:

1. Это не восстанавливает окно, которое было свернуто.

2. Он также не фокусируется на окне. Эти оба activateWindow и showNormal по-прежнему требуются.

3. @edA-qamort-ora-y Вы не упомянули в своем вопросе, что окно может быть свернуто

4. Я мог бы утверждать, что вызов showNormal является четким указанием на то, что окно может быть свернуто.