C++ 其他非Qt窗口顶部的Qt小部件
我正在为我在Windows操作系统中使用的商业程序开发一个插件(我无法更改它)。在这个插件中,我创建了一个Qt小部件,当在主程序中单击一个按钮时,Qt小部件就会出现 我的问题是,小部件显示在主程序窗口下,而我希望它位于其顶部。如有必要,它可以始终保持在顶部 似乎不在这里工作,因为我没有父母 我找到了一种方法将其放在顶部,遵循,并且我创建了一个在小部件构造函数之后调用的方法:C++ 其他非Qt窗口顶部的Qt小部件,c++,windows,qt,widget,C++,Windows,Qt,Widget,我正在为我在Windows操作系统中使用的商业程序开发一个插件(我无法更改它)。在这个插件中,我创建了一个Qt小部件,当在主程序中单击一个按钮时,Qt小部件就会出现 我的问题是,小部件显示在主程序窗口下,而我希望它位于其顶部。如有必要,它可以始终保持在顶部 似乎不在这里工作,因为我没有父母 我找到了一种方法将其放在顶部,遵循,并且我创建了一个在小部件构造函数之后调用的方法: void RadiationPatternWidget::setWindowTopMost() { #ifdef Q_WS
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();
然后我在构造函数之后调用它:
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无法使用的功能,如果窗口被打开,它们将无法单击。单击()信号不会被捕获,当我用鼠标单击按钮时,按钮图像不会改变
- 在小部件内部,我使用一个派生的QGLWidget派生类。当我把它放在上面时,这个小部件是黑色的,而如果我不调用这个方法,它工作得很好
我怎样才能正确地在小部件上提升?在使用您的hack之前,检查
小部件->窗口()->raise()
是否不能工作
使用窗口类“#32770”是一个错误。您需要使用Qt已经用于窗口的同一窗口类
您需要检索Qt为现有窗口使用的类,然后才使用相同的类创建一个新窗口。这是什么Qt版本?我使用的Qt版本是4.8.5。如何检索该类?@Jepessen阅读MSDN中的窗口类。不幸的是,我一点也不知道。。。