QT通过单击Menubar C 移动整个窗口/应用程序
QT Moving entire window/application by clicking on the menubar c++
我想摆脱我的应用程序的标题和边框,但是要做到这一点,我需要能够通过拖动Menubar来移动窗口。我发现这样做的两种方法是:
void TopMenuBar::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
dragPosition = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}
void TopMenuBar::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton) {
move(event->globalPos() - dragPosition);
event->accept();
}
}
但是,如果我将其放在Mainwindow中,无论您单击什么,它都会四处移动,如果我将其放在自定义的Qmenubar中,则只会将菜单移动到窗口中。我还试图在对象之间进行一些信号和插槽欺骗(例如,在Mainubar中保持Mousepressevent和Mainemoveevent在Mainwindow中),但是趋势是窗口将"跳到"鼠标指针所在的位置,而不是顺利移动。
其他人有解决方案吗?
环境是Windows
这将适用于某些 - 只需检查一下即可。调用 ui-> Menubar-> InstalleventFilter(this); 在MainWindow构造器中。
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;
}
相关文章:
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 如何从 Win32 C++ 应用程序输出到父控制台窗口?
- 从运行服务的应用程序代码中提取窗口句柄
- 没有运算符"="与这些操作数匹配,JUCE 窗口演示应用程序
- 如何使用C++确定应用程序是否已在窗口中启动?
- 是否可以从控制台应用程序使用 C++/WinRT 创建窗口?
- 用C++编写.Net窗口应用程序
- 如何将 QML 文件分配给主窗口/应用程序
- 将WM_CHANGEUISTATE发送到窗口应用程序后,当用鼠标访问菜单时,助记符不会显示在系统菜单上
- MSBuild 未在控制台窗口应用程序中使用 "system" 进行编译
- QT通过单击Menubar C 移动整个窗口/应用程序
- 从控制台应用程序启动窗口应用程序
- 如何在QML无窗口应用程序中设置拖放区域
- 如何覆盖其他窗口应用程序的元素?
- 使用MINGW在窗口应用程序中压制系统("command")控制台窗口
- 将二维数组 double[][] 传递给 c# 窗口应用程序
- OpenGL窗口应用程序检查事件更新的频率
- 使用C++窗口应用程序加载Linux格式的文本文件
- 是否可以编写一个windows应用程序,当在另一个窗口应用程序中选择文本时,该应用程序会收到通知
- 如何使用c++ /Qt5构建无窗口应用程序?