Привести окно вперед → raise(), show(), activateWindow() не работать
В моем Qt-приложении я открываю URL-адрес в браузере по умолчанию.
Впоследствии я хочу снова вернуть главное окно моего приложения на передний план.
Я пробовал все подходы, которые я мог найти, но никто не работал. Все, что он делает, мигает в панели задач (окна 7)
Вот пример:
this->viewer->show();
this->viewer->raise();
this->viewer->activateWindow();
* viewer - это указатель на QmlApplicationViewer, полученный из QDeclarativeView
Ответы
Ответ 1
Эта проблема специфична для Windows.
Если активное окно принадлежит к некоторому процессу, то Windows не разрешает другим процессам изменять активное окно.
(Не пробуйте следующее:
https://wiki.qt.io/Qt_project_org_faq#QWidget_::activateWindow.28.29_-_behavior_under_windows)
Ответ 2
попробуйте следующее:
viewer.setWindowState( (windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
viewer.raise(); // for MacOS
viewer.activateWindow(); // for Windows
он работает в моем проекте (в моем средстве просмотра проекта есть QMainWindow): https://github.com/iptton/Rythem.
Ответ 3
for ( QWindow* appWindow : qApplication.allWindows() )
{
appWindow->show(); //bring window to top on OSX
appWindow->raise(); //bring window from minimized state on OSX
appWindow->requestActivate(); //bring window to front/unminimize on windows
}
Обратите внимание, что это также отображает окно с других виртуальных рабочих столов как на OSX, так и на Windows. Я не тестировал это на linux, но может работать.
Ответ 4
Эта проблема не относится к Windows... У меня такая же проблема для Linux. Мое решение состояло в том, чтобы закрыть() окно перед тем, как открыть его().