Qt嵌入无边框三方程序如何防止其还能拖动?通过createWindowContainer将windows的程序界面嵌入到qt的widget里,但是对于无边框窗体,嵌入后还能在widget里拖动,我不想让它还能拖动,老老实实固定在widget里不好吗。试了很多方法都没成功,鼠标在三方窗体部分属于非工作区域,没法检测到鼠标移动,无法阻止,没有成功。使用遮罩覆盖也没有成功,有没有其他办法呢,让它固定在图一的样子,不让他拖动,不能出现图二的样子。
WId wid = (WId)hwnd;
QWindow* window = QWindow::fromWinId(wid);
window->setFlags(window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
window->setSurfaceType(QWindow::OpenGLSurface);
QWidget* widget = QWidget::createWindowContainer(window);
widget->setAttribute(Qt::WA_NativeWindow);
widget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
widget->setFixedSize(width, height);
widget->setWindowTitle(title);
widget->setWindowIcon(getWindowIcon(hwnd));
widget->show;
让第三方的widget成为你主窗口的子类,然后在主窗口事件中处理。
【以下回答由 GPT 生成】
要防止嵌入的无边框窗体拖动,可以通过以下步骤来实现:
SetWindowLongPtr
函数将窗体的样式设置为不可移动。SetWindowLongPtr(hwnd, GWL_STYLE, GetWindowLongPtr(hwnd, GWL_STYLE) & ~WS_POPUP);
然后,将窗体嵌入到Qt的widget中。你已经使用了createWindowContainer
方法来实现这一点。确保在设置窗体的属性之前调用此方法。
设置窗体的属性为WS_CHILD
,这将使窗体成为widget的子窗口,并且不能单独拖动。
SetWindowLongPtr(hwnd, GWL_STYLE, GetWindowLongPtr(hwnd, GWL_STYLE) | WS_CHILD);
SetParent(hwnd, (HWND)widget->winId());
更新后的示例代码如下所示:
WId wid = (WId)hwnd;
QWidget* widget = new QWidget();
widget->setWindowFlags(Qt::FramelessWindowHint);
widget->setFixedSize(width, height);
SetWindowLongPtr(hwnd, GWL_STYLE, GetWindowLongPtr(hwnd, GWL_STYLE) & ~WS_POPUP);
SetWindowLongPtr(hwnd, GWL_STYLE, GetWindowLongPtr(hwnd, GWL_STYLE) | WS_CHILD);
SetParent(hwnd, (HWND)widget->winId());
QWindow* window = QWindow::fromWinId(wid);
window->setSurfaceType(QWindow::OpenGLSurface);
QWidget* container = QWidget::createWindowContainer(window, widget);
container->setAttribute(Qt::WA_NativeWindow);
container->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
container->setWindowTitle(title);
container->setWindowIcon(getWindowIcon(hwnd));
container->show();
这样就能够防止嵌入的无边框窗体在widget中拖动。如果窗体仍然可以拖动,请确保在修改窗体样式之前,窗体已经正确嵌入到widget中,并且widget的windowFlags
已经设置为Qt::FramelessWindowHint
。 如果以上解决方案无效,请确保嵌入的无边框窗体没有实现自己的拖动逻辑,并且尝试在窗体嵌入之前禁用窗体的任何拖动功能。
【相关推荐】