我未装修我的窗口如下:
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
。