Mam QSystemTrayIcon z QAction, która otwiera nowe okno typu QWebView. Kiedy okno straci ostrość i ponownie wybiorę QAction, okno powinno odzyskać ostrość. Działa na Linuksie, ale nie na Mac OS X. Problem polega na tym, że kiedy mam inne okno otwarte i aktywne, powiedzmy Google Chrome, kiedy wywołuję show() w oknie, które próbuję otworzyć, to zawsze jest otwierany pod Google Chrome, więc go nie widzę. To samo dotyczy ustawiania ostrości, gdy mam wiele otwartych okien, a mój QWebView może być ostatnim w kolejności, kiedy kliknę przycisk QAction, aby ustawić ostrość okna, zawsze będzie ono wyświetlane w oknie Google Chrome. Domyślam się, że po kliknięciu przycisku QAction, który jest częścią procesu mojej aplikacji, spróbuje otworzyć/zogniskować okno, ale w środku operacji okno przeglądarki Google Chrome zostanie zaplanowane i nabierze ostrości, ponieważ QSystemTrayIcon nie może utrzymać ostrości. Z tego powodu, gdy okno zostanie otwarte/skupione, nie ukradnie fokusu z Google Chrome, ponieważ system operacyjny na to nie zezwala, więc zostanie umieszczony w aktualnie aktywnym oknie.QWidget na Mac OS X nie koncentrując się w Qt 5.x
Oto jak utworzyć/skupić się okno:
// ...
QPointer<QWebView> view;
// ...
void TrayIcon::webView() {
if (!this->view) {
this->view = new QWebView();
this->view->load("http://example.com");
this->view->show();
} else {
this->view->activateWindow();
this->view->raise();
}
}
Czy coś robię nieprawidłowo lub jest jakiś znany obejście?
Niestety, to nie działa w systemie Windows 10 –