我做个QVTKWidget窗口类,想镶嵌到QMainWidget主
界面中。
但是一旦把QVtkWiget父
窗口设置为主窗口界面时,
原本QMainWIdget主界面中nativeEvent事件
部分消息(WM_NCHITTEST)就无法响应,
而且所有控件的hover、pressed样式也失效。
如果把QVtkWidget窗口父窗口设置为空,主界面就会恢复正常。
是不是QVTKWidget将一些消息给拦截了?求各个大佬帮忙

void VTK3DModelEditor::initWindowVtk()
{
// QVTKWidget vtkWidget = new QVTKWidget ();
// vtkWidget ->setWindowFlags(Qt::Widget | Qt::WindowStaysOnTopHint);
QVTKWidget vtkWidget = new QVTKWidget (this);
auto hlayout = new QHBoxLayout(ui.widget_vtk);
hlayout->addWidget(m_vtkWidget);
}
bool VTK3DModelEditor::nativeEvent(const
QByteArray &eventType, void *message, long *result)
{
MSG* msg = (MSG*)message;
switch (msg->message) {
case WM_NCHITTEST://此消息就无法响应
{
initMousePos();
switch (m_mousePos)
{
case MousePos_Cap:
*result = HTCAPTION;
return true;
case MousePos_Top:
*result = HTTOP;
return true;
case MousePos_Bom:
*result = HTBOTTOM;
return true;
case MousePos_Left:
*result = HTLEFT;
return true;
case MousePos_Right:
*result = HTRIGHT;
return true;
case MousePos_TopLeft:
*result = HTTOPLEFT;
return true;
case MousePos_TopRight:
*result = HTTOPRIGHT;
return true;
case MousePos_BomLeft:
*result = HTBOTTOMLEFT;
return true;
case MousePos_BomRight:
*result = HTBOTTOMRIGHT;
return true;
case MousePos_None:
default:
break;
}
}
break;
case WM_NCCALCSIZE:
return true;
case WM_GETMINMAXINFO:
{
static int flag = 3;
if (::IsZoomed(msg->hwnd)) {
if (flag == 1)
{
*result = ::DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam);
return true;
}
flag = 1;
RECT frame = { 0, 0, 0, 0 };
AdjustWindowRectEx(&frame, WS_OVERLAPPEDWINDOW, FALSE, 0);
frame.left = abs(frame.left);
frame.top = abs(frame.bottom);
this->setContentsMargins(frame.left, frame.top, frame.right, frame.bottom);
}
else {
if (flag == 0)
{
*result = ::DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam);
return true;
}
flag = 0;
this->setContentsMargins(0, 0, 0, 0);
}
*result = ::DefWindowProc(msg->hwnd, msg->message, msg->wParam, msg->lParam);
return true;
}
break;
}
return
QWidget::nativeEvent(eventType, message, result);
}