【发布时间】:2014-04-04 13:43:03
【问题描述】:
我正在为我在 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 派生类。当我把它放在上面时,这个小部件是黑色的,而如果我不调用该方法,它会很好地工作。
我怎样才能正确地在顶部 che QWidget 上加注?
【问题讨论】:
-
这是什么 Qt 版本?
-
我使用的Qt版本是4.8.5。