QT通过单击菜单栏c ++移动整个窗口/应用程序

时间:2016-12-15 11:06:24

标签: c++ qt

我想摆脱我的应用程序的标题和边框,但要做到这一点,我需要能够通过拖动menuBar来移动窗口。我发现这两种方法是:

constructor

但是,如果我将它放在MainWindow中,无论你点击什么,它都会移动,如果我把它放在自定义的QMenuBar中,它只会在窗口内移动菜单栏。我还尝试在对象之间做一些信号和插槽技巧(比如在MenuBar中保持mousePressEvent和在MainWindow中保持mouseMoveEvent),但趋势是窗口会跳过"跳过"到鼠标指针的位置而不是平滑移动它。

其他人有解决方案吗?

环境是Windows

1 个答案:

答案 0 :(得分:2)

这肯定会有用 - 只需检查一下。在MainWindow构造函数中调用 ui-> menuBar-> installEventFilter(this);

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if (watched == ui->menuBar)
    {
        if (event->type() == QEvent::MouseButtonPress)
        {
            QMouseEvent* mouse_event = dynamic_cast<QMouseEvent*>(event);
            if (mouse_event->button() == Qt::LeftButton)
            {
                dragPosition = mouse_event->globalPos() - frameGeometry().topLeft();
                return false;
            }
        }
        else if (event->type() == QEvent::MouseMove)
        {
            QMouseEvent* mouse_event = dynamic_cast<QMouseEvent*>(event);
            if (mouse_event->buttons() & Qt::LeftButton)
            {
                move(mouse_event->globalPos() - dragPosition);
                return false;
            }
        }


    }
    return false;
}