我正在开发一个用于Windows操作系统的商业程序插件(我无法更改)。在这个插件中,我创建了一个Qt Widget,当在主程序中点击一个按钮时,会出现qt小部件。
我的问题是小部件出现在主程序窗口下,而我想要它在它之上。如有必要,它可以永远保持在最佳状态。
Qt::WindowStaysOnTopHint似乎在这里没有用,因为我没有Qt父母。
我已经找到了一种方法可以将它放在Qt wiki之上,并且我创建了一个在widget构造函数之后调用的方法:
void RadiationPatternWidget::setWindowTopMost()
{
#ifdef Q_WS_WIN32
HWND hwnd = winId();
DWORD exStyle = ::GetWindowLong(hwnd, GWL_EXSTYLE);
DWORD style = ::GetWindowLong(hwnd, GWL_STYLE);
HWND parent = NULL;
if (parentWidget()) {
parent = parentWidget()->winId();
}
exStyle |= WS_EX_TOPMOST;
HWND newHwnd = ::CreateWindowEx(exStyle, L"#32770", NULL, style,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
parent, NULL, qWinAppInst(), NULL);
create(newHwnd, true, true);
#endif // Q_WS_WIN32
}
然后我在构造函数之后调用它:
m_pxRadiationPatternWidget = new RadiationPatternWidget();
m_pxRadiationPatternWidget->setWindowTopMost();
现在它保持领先,但我遇到了一些问题:
如何才能正确地提升QWidget?
答案 0 :(得分:0)
在使用hack之前,请检查widget->window()->raise()
是否无效。
使用窗口类“#32770”是一个错误。您需要使用Qt已经用于窗口的相同窗口类。
您需要检索Qt用于现有窗口的类,然后才创建具有相同类的新窗口。