将窗口置于前面 - > raise(),show(),activateWindow()不起作用

Hed*_*dge 21 c++ windows winapi qt foreground

在我的Qt应用程序中,我在默认浏览器中打开一个URL.之后我想把我的应用程序的主窗口再次放到前面.

我尝试了所有可以找到的方法,但都没有用.它只是在任务栏(窗口7)中闪烁.这是一个例子:

this->viewer->show();
this->viewer->raise();
this->viewer->activateWindow();
Run Code Online (Sandbox Code Playgroud)

*viewer是指向QmlApplicationViewer的指针,该QmlApplicationViewer派生自QDeclarativeView

小智 25

试试这个:

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

它在我的项目中工作(在我的项目查看器中是QMainWindow):https://github.com/iptton/Rythem.

  • 在pyQt5中执行showNormal()然后activateWindow()工作 (2认同)

Joh*_*åde 7

此问题特定于 Windows。如果活动窗口属于某个进程,则 Windows 不允许其他进程更改活动窗口。

(不要尝试以下操作:https : //wiki.qt.io/Qt_project_org_faq#QWidget_ :: activateWindow.28.29 _-_ behavior_under_windows

  • 这不是特定于 Windows 的_问题_。这是所有蹩脚的、窃取焦点的应用程序的_解决方案_。Windows 表示应用程序需要用户的注意,但它让用户负责。 (16认同)
  • 不管你戴什么颜色的帽子:那只会在你的本地机器上“修复”它,而不是客户端。多亏了 UAC(也在更高版本的 Windows 中引入),我的注册表设置可以安全地禁止您的流氓应用程序! (7认同)

Sun*_*275 5

我是这样做的:

{
 this->show(); // Restore from systray
 this->setWindowState(Qt::WindowState::WindowActive); // Bring window to foreground
}
Run Code Online (Sandbox Code Playgroud)

假设“ this”是您的QMainWindow. 像魅力一样工作。