![](/img/trans.png)
[英]Make Qt top-level window “owned” by other non-Qt window within a single process
[英]Qt widget on top of other non qt window
我正在為Windows操作系統中使用的商業程序(無法更改)開發插件。 在此插件中,我創建了一個Qt小部件,然后在主程序中單擊按鈕時,將顯示qt小部件。
我的問題是,小部件出現在主程序窗口下,而我希望它位於其頂部。 如有必要,它可以始終保持在最前面。
Qt :: WindowStaysOnTopHint似乎在這里不起作用,因為我沒有Qt父母。
我找到了一種將其放在Qt Wiki之后的頂部的方法,並且創建了一個在小部件構造函數之后調用的方法:
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?
在使用您的hack之前,請檢查widget->window()->raise()
是否不起作用。
使用窗口類“#32770”是錯誤。 您需要使用與Qt已經用於您的窗口的相同窗口類。
您需要檢索Qt用於現有窗口的類,然后才使用相同的類創建一個新窗口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.