keep_a_cat |
2020-01-09 11:09 |
QVtkWidget镶嵌到QWidget中,原本的QWidget::nativeEvent中的部分事件就无法响应
我做个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); } |
|