Вывести окно на передний план -> Raise (), Show (), ActivWindow () не работают - PullRequest
19 голосов
/ 22 мая 2011

В моем Qt-приложении я открываю URL в браузере по умолчанию. После этого я хочу снова вывести главное окно моего приложения на передний план.

Я перепробовал все подходы, которые смог найти, но ни один из них не сработал. Все, что он делает, это мигает на панели задач (окна 7) Вот пример:

this->viewer->show();
this->viewer->raise();
this->viewer->activateWindow();

* средство просмотра - это указатель на QmlApplicationViewer, который получен из QDeclarativeView

Ответы [ 4 ]

25 голосов
/ 30 мая 2012

попробуйте это:

viewer.setWindowState( (windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
viewer.raise();  // for MacOS
viewer.activateWindow(); // for Windows

это работает в моем проекте (в моем окне просмотра проекта QMainWindow): https://github.com/iptton/Rythem.

4 голосов
/ 22 мая 2011

Эта проблема характерна для Windows. Если активное окно принадлежит какому-либо процессу, Windows не разрешает другим процессам изменять активное окно.

(Не пытайтесь сделать следующее: https://wiki.qt.io/Qt_project_org_faq#QWidget_::activateWindow.28.29_-_behavior_under_windows)

2 голосов
/ 10 января 2017
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, он может работать, хотя.

1 голос
/ 08 октября 2013

Эта проблема не относится к Windows .... У меня такая же проблема в Linux.Мое решение состояло в том, чтобы закрыть () окно, прежде чем я снова открою () его.

...