通过Qt API在Windows上可行吗?我需要这样的功能/行为因为我想将我的Qt代码作为插件集成到第三方应用程序中,我想尽可能无缝地完成它。例如,我不想在任务栏上有另一个代表我的Qt窗口的项目。我正在谈论单流程应用。
我找到了一种使用WinAPI和HWND的方法:
// The Qt frame is "alien". We need its HWND so transform it (and all its ancestors,
// which is probably fine for me) to a "native" widget first.
Q_ASSERT(!frame->testAttribute(Qt::WA_NativeWindow));
frame->setAttribute(Qt::WA_NativeWindow);
Q_ASSERT(frame->testAttribute(Qt::WA_NativeWindow));
// Get the HWND.
QWindow* frameHandle = frame->windowHandle();
Q_ASSERT(frameHandle);
HWND frameHwnd = HWND(frameHandle->winId());
Q_ASSERT(frameHwnd);
// And use it to set the frame's "owner" (not "parent" because WS_CHILD bit is not set).
Q_ASSERT((GetWindowLongPtr(frameHwnd, GWL_STYLE) & WS_CHILD) == 0);
SetWindowLongPtr(frameHwnd, GWLP_HWNDPARENT, LONG_PTR(getOtherNonQtWindowHwnd()));
如果在>显示框架后完成,这似乎按预期工作。但是这种解决方案有点奇怪,我担心这甚至是危险的。此外,Qt本身可能会在以后随时覆盖设置。
从上面的代码片段中可以看出,我能够检索第三方应用程序主窗口的HWND。因此,从WinAPI的角度来看,它应该是可行的。拜托,有没有一些Qt方式这样做?或者至少是一个更好的解决方案?