私のQtアプリケーションでは、default-browserでURLを開きます。その後、アプリケーションのメインウィンドウを再び前面に表示したいと思います。
私は見つけることができるすべてのアプローチを試しましたが、どれもうまくいきませんでした。 (ウィンドウ7の)タスクバーで点滅するだけです。例は次のとおりです。
this->viewer->show();
this->viewer->raise();
this->viewer->activateWindow();
* viewerはQDeclarativeViewから派生したQmlApplicationViewerへのポインターです
この問題はWindowsに固有です。アクティブウィンドウが何らかのプロセスに属している場合、Windowsは他のプロセスがアクティブウィンドウを変更することを許可しません。
(以下を試さないでください: https://wiki.qt.io/Qt_project_org_faq#QWidget_::activateWindow.28.29_-_behavior_under_windows )
これを試して:
viewer.setWindowState( (windowState() & ~Qt::WindowMinimized) | Qt::WindowActive);
viewer.raise(); // for MacOS
viewer.activateWindow(); // for Windows
それは私のプロジェクトで動作します(私のプロジェクトビューアーではQMainWindowです): https://github.com/iptton/Rythem 。
私はそれをこのようにしました:
{
this->show(); // Restore from systray
this->setWindowState(Qt::WindowState::WindowActive); // Bring window to foreground
}
「これ」があなたのQMainWindowであると仮定します。魅力のように働いた。
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でテストしませんでしたが、うまくいくかもしれません。
この問題はWindowsに固有のものではありません... Linuxでも同じ問題があります。私の解決策は、open()する前にウィンドウをclose()することでした。