簡體   English   中英

其他非qt窗口頂部的Qt小部件

[英]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();

現在它排在最前,但是我有一些問題:

  • 在小部件內,我無法使用某些QPushButton,如果引發窗口,則無法單擊它們。 當我用鼠標單擊時,不會捕獲clicked()信號,按鈕圖像也不會更改。
  • 在小部件內部,我使用派生的QGLWidget派生類。 當我將其放在頂部時,此小部件為黑色,而如果我不調用該方法,它將很好地工作。

我怎樣才能正確地舉起QWidget?

在使用您的hack之前,請檢查widget->window()->raise()是否不起作用。

使用窗口類“#32770”是錯誤。 您需要使用與Qt已經用於您的窗口的相同窗口類。

您需要檢索Qt用於現有窗口的類,然后才使用相同的類創建一個新窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM