QT QMenu exec(QCursor::pos()在全屏的时候会闪一下
时间: 2023-11-27 19:49:38 浏览: 253
这个问题可能是由于QMenu的显示位置不正确导致的。在全屏模式下,QCursor::pos()返回的鼠标位置是相对于屏幕的而不是相对于应用程序窗口的。因此,如果你在全屏模式下使用QCursor::pos()作为QMenu的显示位置,可能会导致QMenu在应用程序窗口外部闪烁。
为了解决这个问题,你可以使用QCursor::pos()方法获取鼠标在屏幕上的位置,然后将其转换为相对于应用程序窗口的位置。你可以使用QWidget::mapFromGlobal()方法将屏幕坐标转换为窗口坐标。例如:
```cpp
QMenu menu(this);
// 将屏幕坐标转换为窗口坐标
QPoint pos = this->mapFromGlobal(QCursor::pos());
menu.exec(pos);
```
这样就可以确保QMenu在应用程序窗口内正确地显示,避免闪烁问题。
相关问题
qt Qmenu exec(QCursor::pos())会导致画面闪一下
QMenu::exec() 函数弹出菜单时,会阻塞主线程,直到菜单被关闭。这可能会导致屏幕的闪烁和卡顿等问题。
为了避免这个问题,你可以使用 QMenu::popup() 函数而不是 QMenu::exec() 函数。QMenu::popup() 函数不会阻塞主线程,它弹出菜单并立即返回,这样就可以避免画面的闪烁和卡顿问题。
另外,你还可以在弹出菜单之前将主窗口的更新暂停,并在菜单关闭后再恢复更新。这样也可以避免画面闪烁的问题。你可以使用 QWidget::setUpdatesEnabled() 函数来实现此功能。代码示例如下:
```cpp
// 在弹出菜单之前禁用更新
mainWindow->setUpdatesEnabled(false);
menu.popup(QCursor::pos());
// 菜单关闭后恢复更新
mainWindow->setUpdatesEnabled(true);
```
希望以上内容能帮到你。
qt 弹出按钮Qmenu exec(QCursor::pos())会导致画面闪一下
这个问题可能是由于弹出菜单时会触发窗口重绘,导致画面闪烁。你可以尝试使用QMenu的popup()方法代替exec()方法来解决这个问题。popup()方法不会阻塞主线程,也不会触发窗口重绘,因此可以避免画面闪烁的问题。你可以将QCursor::pos()作为参数传递给popup()方法,以实现在鼠标位置弹出菜单的效果。代码示例如下:
```
QMenu menu;
// 添加菜单项...
menu.popup(QCursor::pos());
```
如果你还是想使用exec()方法,可以尝试在调用exec()方法之前,先将窗口的更新暂停一下,然后在菜单关闭后再恢复更新。这样可以避免画面闪烁的问题。代码示例如下:
```
QMenu menu;
// 添加菜单项...
QWidget* parentWidget = this; // 菜单的父窗口
parentWidget->setUpdatesEnabled(false); // 暂停更新
menu.exec(QCursor::pos());
parentWidget->setUpdatesEnabled(true); // 恢复更新
```
阅读全文