我想摆脱我的应用程序的标题和边框,但要做到这一点,我需要能够通过拖动menuBar来移动窗口。我发现这两种方法是:
constructor
但是,如果我将它放在MainWindow中,无论你点击什么,它都会移动,如果我把它放在自定义的QMenuBar中,它只会在窗口内移动菜单栏。我还尝试在对象之间做一些信号和插槽技巧(比如在MenuBar中保持mousePressEvent和在MainWindow中保持mouseMoveEvent),但趋势是窗口会跳过"跳过"到鼠标指针的位置而不是平滑移动它。
其他人有解决方案吗?
环境是Windows
答案 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;
}