c ++附加到线程(获得焦点)

c++ attaching to thread (taking focus)

所以,(我重写了这个,因为很多人不理解我。我很抱歉。)

我想将我的 qt 应用程序的 window 放在屏幕上所有 windows 的最前面。

我听说你可以通过附加到前景 window 的线程来做到这一点,然后 "stealing focus" 也就是将你自己放在前景 window 所在的位置。

(我正在使用 OSX,所以 windows.h 不适合我。)

希望你现在明白了。

要将 window 放在前面,ensure the window is visible, then activate window。

如文档所述:-

Sets the top-level widget containing this widget to be the active window.

If you want to ensure that the window is stacked on top as well you should also call raise().

因此,假设您有一个名为 pWindow 的 window,您可以这样做:-

pWindow->raise();
pWindow->show();
pWindow->activateWindow();

另请注意,OS X 可以有多个桌面(Spaces)。如果您还希望 window 在用户切换时跟踪用户的 Space,您可以将此功能添加到您的 window class:-

void MyWindow::DisplayOnAllSpaces()
{
    // ensure we stay on the active desktop
    WId windowObject = this->winId();
    objc_object* nsviewObject = reinterpret_cast<objc_object *>(windowObject);
    objc_object* nsWindowObject = objc_msgSend(nsviewObject, sel_registerName("window"));
    int NSWindowCollectionBehaviorCanJoinAllSpaces = 1 << 0;
    objc_msgSend(nsWindowObject, sel_registerName("setCollectionBehavior:"), NSWindowCollectionBehaviorCanJoinAllSpaces);
}