如何在QT中拖动未装饰的窗口

  • 本文关键字:窗口 拖动 QT c++ qt
  • 更新时间 :
  • 英文 :


我未装修我的窗口如下:

MainWindow::MainWindow(QWidget *parent) :
    QWidget(parent, Qt::FramelessWindowHint | Qt::WindowSystemMenuHint)
{}

我该如何使其可拖动?

由于您删除了窗口装饰,因此窗口系统可以提供移动的任何访问点,您都必须自己实现。

您可以重新完成窗口的鼠标事件处理程序,也可以在窗口对象上使用事件过滤器。

分别参见QWidget::mousePressEvent()QWidget::mouseMoveEvent()QWidget::mouseReleaseEvent()QObject::eventFilter()

QWidget::move()当然是实际运动。

由于您已经有一个派生类,因此实现事件处理程序可能是更直接的方法。

由于qt 5.15,恰好有 QWindow::startSystemMode

这是一个小部件的示例片段,该小部件触发系统为其窗口移动时,当它左键单击时:

void WindowMoveWidget::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        window()->windowHandle()->startSystemMove();
        return;
    }
    return QWidget::mousePressEvent(event);
}

有关更多信息,请参见各自的博客文章。

请注意,该函数返回该操作是否由系统支持,因此您可能需要检查其返回值并基于QWidget::move

实现后备。

最新更新