如何调整大小和 areo snap frameless windows qt6

How to resize and areo snap frameless windows qt6

我在 qt designers 中设计了一个表单
我还使用 Qt::FramelessWindowHintQt::WA_TranslucentBackground
使我的程序无框架 目前我在我的程序中以这种方式手动编码拖动windows

bool Qt6Gui::eventFilter(QObject* obj, QEvent* event)
{
    switch (event->type())
    {
    case QEvent::MouseButtonDblClick:
    {
        auto* mouseEvent = static_cast<QMouseEvent*>(event);
        if (obj == ui.titleRightInfo && mouseEvent->buttons() & Qt::MouseButton::LeftButton)
            QTimer::singleShot(250, this, &Qt6Gui::maximize_restore);
    }
    break;
    case QEvent::MouseButtonPress:
    {
        if (obj == ui.titleRightInfo)
        {
            auto* mouseEvent = static_cast<QMouseEvent*>(event);

            if (mouseEvent->buttons() & Qt::MouseButton::LeftButton)
            {
                mouse_pos = ui.titleRightInfo->mapToGlobal(mouseEvent->pos());

                onMove = true;
            }
        }
    }
    break;
    case QEvent::MouseMove:
    {
        if (obj == ui.titleRightInfo && onMove)
        {
            auto* mouseEvent = static_cast<QMouseEvent*>(event);

            if (mouseEvent->buttons() & Qt::MouseButton::LeftButton)
            {
                auto glb_mousepos = ui.titleRightInfo->mapToGlobal(mouseEvent->pos());
                auto delta = glb_mousepos - mouse_pos;

                if (delta.x() || delta.y())
                {
                    auto newpos = this->pos() + delta;
                    mouse_pos = glb_mousepos;
                    if (GLOBAL_STATE == 1)
                        maximize_restore();
                    this->move(newpos);
                }
            }
        }
    }
    break;
    case QEvent::MouseButtonRelease:
    {
        if (obj == ui.titleRightInfo && onMove)
        {
            auto pos = this->mapToGlobal(QPoint(0, 0));
            if (pos.y() < 0)
            {
                auto old_pos = this->pos();
                this->move(old_pos.x(), old_pos.y() - pos.y() + 1);
            }

            onMove = false;
        }
    }
    break;
    }

    return QWidget::eventFilter(obj, event);
}

它的工作没有任何问题,但它缺少区域
我还使用 QSizeGrip

调整我的程序大小
QSizeGrip* sizegrip = new QSizeGrip(ui.frame_size_grip);
sizegrip->setStyleSheet("width: 20px; height: 20px; margin 0px; padding: 0px;");

它也能工作,但它只适用于我程序的一侧
我的问题是我希望能够使用 areo snap 来调整我的程序的大小(并且还能够从所有边缘调整它的大小),我找到了一些解决方案(比如 this and this)但是 none工作正常(可能是因为我使用的是设计器 ui 文件) 我想知道是否可以将 windows 与其他 window 对齐并在拖动到屏幕边缘时调整其大小,就像我们使用普通 window 框架一样?并从所有边缘自由调整大小?
感谢帮助

经过更多搜索,我终于找到了 this on github 这正是我想要的。